在Python中返回regex中的所有匹配项

时间:2014-05-25 05:26:12

标签: python regex

>>> import re
>>> p=re.compile('(a(.)c)d')

为什么以下只返回'abcd'而不是'aecd'?如果我想两个都回来,我该怎么办?如果我只想归还aecd,我该怎么办?

>>> m=p.match('abcdeaecd')
>>> m.group() 
'abcd'
>>> m.groups()
('abc', 'b')

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以像这样简化您的RegEx

import re
p=re.compile(r'a.cd')

并使用re.findall获取所有匹配项,例如

print p.findall('abcdeaecd')
# ['abcd', 'aecd']

否则你可以使用你的RegEx本身并迭代这样的匹配

print [item.group() for item in p.finditer('abcdeaecd')]
# ['abcd', 'aecd']

答案 1 :(得分:2)

您需要使用finditer代替match

ms = p.finditer('abcdeaecd')
    for m in ms:
        # do something with m.group or m.groups