正如我读过的那样 (dog|cat)food 会寻找 dog foodcat food 但我无法用我的案例重现它。

>>> for m in re.findall('RA[a-zA-Z0-9]*',"RAJA45909"):
    print(m)


RAJA45909
>>> for m in re.findall('(ra|RA)[a-zA-Z0-9]*',"RAJA45909"):
    print(m)


RA
>>>

有人可以帮助我理解这一点。

最佳答案

您应该使用 re.finditer 而不是 re.findall ,然后打印整个匹配组:

>>> for m in re.finditer('(ra|RA)[a-zA-Z0-9]*',"RAJA45909"):
...     print(m.group())
...
RAJA45909
findall 的文档说:



您的正则表达式只有一组,因此结果是与该组匹配的文本列表。如果我们添加另一个组,您会看到:
>>> for m in re.findall('(ra|RA)([a-zA-Z0-9]*)',"RAJA45909"):
...     print(m)
...
('RA', 'JA45909')

所以 findall 与组一起使用时匹配整个正则表达式,但只返回组匹配的部分。而 finditer 总是返回一个完整的匹配对象。

关于python - 为什么 findall 在与组匹配时不返回整个匹配项?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36526800/

10-12 14:07