用Python正则表达式从字符串中提取版本号
这个字符串看起来是这样的:(\n
用来换行)
MySQL-vm
Version 1.0.1
WARNING:: NEVER EDIT/DELETE THIS SECTION
我想要的只是 1.0.1 。
我试着用 re.search(r"Version+'([^']*)'", my_string, re.M).group(1)
,但是没有成功。
re.findall(r'\d+', version)
给我返回的是一个数字数组,我还得把这些数字拼起来。
我该如何改进这个正则表达式呢?
6 个回答
1
这是一个链接,点击可以查看相关内容:https://regex101.com/r/5Us6ow/1
下面的内容是一个正则表达式,用来匹配版本号,比如 1、1.0 和 1.0.1 这样的格式:
def version_parser(v):
versionPattern = r'\d+(=?\.(\d+(=?\.(\d+)*)*)*)*'
regexMatcher = re.compile(versionPattern)
return regexMatcher.search(v).group(0)
1
(?<=Version\s)\S+
试试这个。用它配合 re.findall
来使用。
x="""MySQL-vm
Version 1.0.1
WARNING:: NEVER EDIT/DELETE THIS SECTION"""
print re.findall(r"(?<=Version\s)\S+",x)
输出结果:['1.0.1']
查看演示。
3
我们可以使用Python的re
库。这里提到的正则表达式是用来匹配只包含数字的版本号。
import re
versions = re.findall('[0-9]+\.[0-9]+\.?[0-9]*', AVAILABLE_VERSIONS)
unique_versions = set(versions) # convert it to set to get unique versions
其中,AVAILABLE_VERSIONS
是一个包含版本号的字符串。
21
使用下面的正则表达式,可以从第一个组中提取版本号。
Version\s*([\d.]+)
>>> import re
>>> s = """MySQL-vm
... Version 1.0.1
...
... WARNING:: NEVER EDIT/DELETE THIS SECTION"""
>>> re.search(r'Version\s*([\d.]+)', s).group(1)
'1.0.1'
解释:
Version 'Version'
\s* whitespace (\n, \r, \t, \f, and " ") (0 or
more times)
( group and capture to \1:
[\d.]+ any character of: digits (0-9), '.' (1
or more times)
) end of \1