在Python中返回正则表达式的所有匹配项

1 投票
2 回答
1001 浏览
提问于 2025-04-18 07:30
>>> 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']

撰写回答