Python 将版本号表示为正则表达式
我需要将版本号表示为正则表达式。广义的定义是Python 将版本号表示为正则表达式,python,regex,Python,Regex,我需要将版本号表示为正则表达式。广义的定义是 只由数字组成 允许任意数量的小数点(但不能连续) 最大数量没有限制 因此2.3.4.1,2.3,29999.9999.9999均有效,而2..2.3.则无效 我编写了以下简单的正则表达式 '(\d+\.{0,1})+' 在python和模块中使用它并在“2.6.31”中搜索 >>> y = re.match(r'(\d+\.{0,1})+$','2.6.31') >>> y.group(0) '2.6.31' &
2.3.4.1,2.3,29999.9999.9999
均有效,而2..2.3.
则无效
我编写了以下简单的正则表达式
'(\d+\.{0,1})+'
在python和模块中使用它并在“2.6.31”中搜索
>>> y = re.match(r'(\d+\.{0,1})+$','2.6.31')
>>> y.group(0)
'2.6.31'
>>> y.group(1)
'31'
但是如果我命名组,那么命名组只有31个
我的正则表达式是正确的还是可以调整/改进?它目前不处理
2.3.
案例。符号{0,1}
可以缩短为仅?
:
r'(\d+\.?)+$'
但是,上面的命令将允许使用尾随的
。或许可以尝试:
r'\d+(\.\d+)*$'
一旦验证了格式是否符合预期,最简单的方法就是使用re.findall()
:
或者,您可能希望使用: 或:
捕获组将只保留模式的最后一次出现。此模式非常常见,pyparsing提供了助手函数
delimitedList
,允许您将解析器编写为parser=delimitedList(integer,delim=')
得到同样的结果。@PaulMcGuire我已经更新了我的答案。非常感谢你的评论,也感谢你的分析。
>>> ver = "1.2.3.4"
>>> re.findall(r'\d+', ver)
['1', '2', '3', '4']
>>> from pyparsing import *
>>> integer = Word(nums)
>>> parser = delimitedList(integer, delim='.') + StringEnd()
>>> list(parser.parseString('1.2.3.4'))
['1', '2', '3', '4']
>>> from lepl import *
>>> with Separator(~Literal('.')):
... parser = Integer()[1:]
>>> parser.parse('1.2.3.4')
['1', '2', '3', '4']