我需要验证应用程序的版本号是否大于 1.18.10。在这种情况下,正则表达式应该是什么样子?
问问题
887 次
4 回答
15
不要为此使用正则表达式。使用split
与tuple
比较:
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")
于 2013-06-11T09:06:54.747 回答
4
似乎这个电池已经包含在 Python 中distutils.version
:
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
这考虑了将版本号部分作为整数和非数字部分(例如字母扩展名)分开且正确地进行拆分和比较。(如果您想要替代行为,(字典比较),您可以直接比较结果为 a 的字符串元组version_num.split(".")
)
请注意,还有一个变体会在版本字符串中的字母字符上StrictVersion
引发异常 ( )。ValueError
另请参阅PEP386,它计划弃用两者,将它们替换为NormalizedVersion
.
于 2013-06-11T09:51:09.573 回答
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
于 2013-06-11T09:02:22.803 回答
0
不要为此使用正则表达式,但类似:
major, minor, patch = v.split('.')
if int(major) > 1 or (int(major) == 1 and int(minor) >= 18):
...
于 2013-06-11T09:01:29.033 回答