我阅读(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
>>>
有人可以帮助我理解这一点。
答案 0 :(得分:2)
您应该使用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
始终返回完整的匹配对象。
答案 1 :(得分:0)