版本号大于1.18.10的正则表达式

时间:2013-06-11 08:57:03

标签: python regex

我需要验证应用程序的版本号是否大于1.18.10。 在这种情况下,正则表达式应该如何?

4 个答案:

答案 0 :(得分:15)

不要为此使用正则表达式。使用splittuple比较:

def is_recent(version):
    version_as_ints = (int(x) for x in version.split('.'))
    return tuple(version_as_ints) > (1, 18, 10)

然后检查is_recent("1.10.11")is_recent("1.18.12")

答案 1 :(得分:4)

好像这个电池已经包含在distutils.version中的Python中:

from distutils.version import LooseVersion
LooseVersion("1.18.11") > LooseVersion("1.18.10")
#True

LooseVersion("1.2.11") > LooseVersion("1.18.10")
#False (note that "2">"18" is True)

LooseVersion("1.18.10a") > LooseVersion("1.18.10")
#True

这考虑了分割并将版本号部分分别作为整数和非数字部分(例如字母扩展)单独和正确地进行比较。 (如果你想要替代行为(词典比较),你可以直接比较version_num.split(".")上产生的字符串的元组

请注意,还有一个StrictVersion变体会在版本字符串中的字母字符上引发异常(ValueError)。另请参阅计划弃用这两者的PEP386,将其替换为NormalizedVersion

答案 2 :(得分:0)

不要使用正则表达式,但是:

major, minor, patch = v.split('.')
if int(major) > 1 or (int(major) == 1 and int(minor) >= 18):
    ...

答案 3 :(得分:0)

不确定为什么需要正则表达式,它不是进行复杂范围检查的特别好的工具。

我只需将split字符串转换为三元素数组然后检查每个元素,例如:

(p1, p2, p3) = verstr.split(".")

# May want to check they're numeric first.

if int(p1) < 1: return False
if int(p1) == 1:
    if int(p2) < 18: return False
    if int(p2) == 18:
        if int(p3) < 10: return False
return True