Python正则表达式:只匹配最后一个出现的内容

3

我在实现一个重复字符串模式的正则表达式时遇到了一些问题。

>>> re.findall('(\(\w+,\d+\)(?:,)?)+', '(a,b),(c,d),(e,f)')
['(e,f)']

我希望也能获取其他物品。

非常感谢您提供的帮助。


2
真的吗,f\d 匹配到了?我有点怀疑 :-) - Martijn Pieters
1个回答

4

去掉+;你的模式匹配所有出现,但该分组只能捕获一次出现,不能那样重复一个捕获分组:

>>> import re
>>> re.findall('(\(\w+,\w+\),?)+', '(a,b),(c,d),(e,f)')
['(e,f)']
>>> re.findall('\(\w+,\w+\),?', '(a,b),(c,d),(e,f)')
['(a,b),', '(c,d),', '(e,f)']

我将\d替换为\w以进行示范,并删除了逗号周围多余的非捕获组。最外层的捕获组也是多余的;没有它,re.findall()会返回整个匹配的表达式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接