Python正则表达式从字符串中提取版本
字符串如下所示:(Python正则表达式从字符串中提取版本,python,regex,Python,Regex,字符串如下所示:(\n用于断开该行) 我想要的只是1.0.1 我正在尝试re.search(r“Version+”([^']*)”,我的字符串re.M)。组(1),但它不起作用 re.findall(r'\d+',version)给了我一个数字数组,我必须再次追加它 如何改进正则表达式 使用下面的正则表达式并从组索引1获取版本号 Version\s*([\d.]+) 说明: Version 'Version' \s*
\n
用于断开该行)
我想要的只是1.0.1
我正在尝试re.search(r“Version+”([^']*)”,我的字符串re.M)。组(1)
,但它不起作用
re.findall(r'\d+',version)
给了我一个数字数组,我必须再次追加它
如何改进正则表达式 使用下面的正则表达式并从组索引1获取版本号
Version\s*([\d.]+)
说明:
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
您还可以尝试使用不使用字符串中的字符,但仅断言是否可能匹配的。在下面的正则表达式中,您不需要findAll
和group
函数
(?<=Version )[\d.]+
(?
输出:['1.0.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)
我建议首先解析字符串并只在相关部分应用正则表达式。这会让你的生活更轻松。“Version+”
意味着匹配V-e-r-s-I-o
,然后是一个或多个n
s。它只会重复n
一次或多次。+1用于演示网站信息。从未听说过:)是的,这是一个很棒的网站。您可以在那里检查您的正则表达式。代码是从regex101复制的。我对Python一无所知。您使用的是同一个站点进行演示。可能代码不正确,但它对正则表达式测试很有效。谢谢,我已经从答案中删除了代码部分。
(?<=Version )[\d.]+
(?<= look behind to see if there is:
Version 'Version '
) end of look-behind
[\d.]+ any character of: digits (0-9), '.' (1 or more times)
(?<=Version\s)\S+
x="""MySQL-vm
Version 1.0.1
WARNING:: NEVER EDIT/DELETE THIS SECTION"""
print re.findall(r"(?<=Version\s)\S+",x)
def version_parser(v):
versionPattern = r'\d+(=?\.(\d+(=?\.(\d+)*)*)*)*'
regexMatcher = re.compile(versionPattern)
return regexMatcher.search(v).group(0)