下面是我的代码。我的理解是我的模式说你必须满足汽车和宠物是选项。即检查单词汽车和地毯。现在重新搜索匹配地毯,这很好。但是 re.finall 输出应该是 ['carpet', 'car'],但它向我显示 ['pet', ''] .请让我知道我哪里不正确?import restring = "carpet and car"pattern = r'car(pet)?'print(re.search(pattern, string))print(re.findall(pattern, string))这是代码的输出:<_sre.SRE_Match object; span=(0, 6), match='carpet'>['pet', '']
2 回答

海绵宝宝撒
TA贡献1809条经验 获得超8个赞
用
pattern = r'car(?:pet)?'
反而。这?:使组无法捕获(请参阅正则表达式语法文档),这findall与它返回捕获组列表(如果您的模式中存在捕获组列表)完全不同:
>>> re.findall(pattern, "carpet and car")
['carpet', 'car']

DIEA
TA贡献1820条经验 获得超2个赞
原因在以下re
文档中findall()
提到:
以字符串列表的形式返回字符串中模式的所有非重叠匹配项。从左到右扫描字符串,并按找到的顺序返回匹配项。如果模式中存在一个或多个组,则返回组列表;如果模式有多个组,这将是一个元组列表。结果中包含空匹配项。
如果您想要预期的结果,请使用finditer()
.
添加回答
举报
0/150
提交
取消