python中的正则表达式组重复

2023-12-23

string = "input-ports 6012, 6017, 6016"
m = re.match("input-ports(\s\d{4},?)(\s\d{4},?)(\s\d{4},?)", string)
print m.groups #=> (' 6012,', ' 6017,', ' 6016')

但是当我想使用组重复时,它只返回最后一个数字

m = re.match("input-ports(\s\d{4},?)+", string)
print m.groups #=> (' 6016',)

谁能告诉我这是为什么?


虽然传统的正则表达式引擎只记住并返回最后一个匹配项,但一些高级库提供了captures保存给定组的所有匹配项的属性。有一个图书馆叫regex https://pypi.python.org/pypi/regex/对于 python 来说,除了其他好处之外,还可以做到这一点:

import regex

string = "input-ports 6012, 6017, 6016"
m = regex.match("input-ports(?:\s(\d{4}),?)+", string)
print m.captures(1) # ['6012', '6017', '6016']

如果您无法使用该库,唯一的解决方法是使用findall并将重复替换为带有前瞻的单个组。这并不总是可能的,但你的例子很简单:

import re

string = "input-ports 6012, 6017, 6016"
m = re.findall("(?<=\s)\d{4}(?=,|$)", string)
print m # ['6012', '6017', '6016'] 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python中的正则表达式组重复 的相关文章

随机推荐