Python正则表达式从字符串中提取版本

时间:2014-10-21 07:15:20

标签: python regex

字符串如下所示:( \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)正在给我一系列数字,我必须再追加。

如何改进正则表达式?

4 个答案:

答案 0 :(得分:10)

使用以下正则表达式并从组索引1获取版本号。

Version\s*([\d.]+)

DEMO

>>> 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

答案 1 :(得分:1)

您也可以尝试使用Positive Look behind不消耗字符串中的字符,但仅断言是否可以匹配。在下面的正则表达式中,您不需要findAllgroup函数。

(?<=Version )[\d.]+

Online demo

说明:

  (?<=                     look behind to see if there is:
    Version                  'Version '
  )                        end of look-behind
  [\d.]+                   any character of: digits (0-9), '.' (1 or more times)

答案 2 :(得分: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']

参见演示。

http://regex101.com/r/dK1xR4/12

答案 3 :(得分:0)

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)