Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python正则表达式从字符串中提取版本_Python_Regex - Fatal编程技术网

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)