在Python中返回正则表达式的所有匹配项
>>> import re
>>> p=re.compile('(a(.)c)d')
为什么下面的代码只返回'abcd'而不返回'aecd'呢?如果我想同时返回这两个结果,我该怎么做?如果我只想返回
>>> m=p.match('abcdeaecd')
>>> m.group()
'abcd'
>>> m.groups()
('abc', 'b')
谢谢!
2 个回答
2
你应该使用 finditer
而不是 match
:
ms = p.finditer('abcdeaecd')
for m in ms:
# do something with m.group or m.groups
3
你可以把你的正则表达式简化成这样
import re
p=re.compile(r'a.cd')
然后可以用 re.findall
来获取所有匹配的结果,像这样
print p.findall('abcdeaecd')
# ['abcd', 'aecd']
或者你也可以直接使用你的正则表达式,逐个检查匹配的结果,像这样
print [item.group() for item in p.finditer('abcdeaecd')]
# ['abcd', 'aecd']