正如我读过的那样 (dog|cat)food
会寻找 dog food
和 cat 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/