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

8 投票
6 回答
22810 浏览
提问于 2025-04-28 17:55

这个字符串看起来是这样的:(\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']

查看演示。

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

1

你可以试试 正向后顾 这种方法,它不会消耗字符串中的字符,而只是判断是否有匹配的可能。在下面的正则表达式中,你不需要使用 findAllgroup 这些函数。

(?<=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)
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

撰写回答