python正则表达式搜索和findall

下面是我的代码。我的理解是我的模式说你必须满足汽车和宠物是选项。即检查单词汽车和地毯。现在重新搜索匹配地毯,这很好。但是 re.finall 输出应该是 ['carpet', 'car'],但它向我显示 ['pet', ''] .请让我知道我哪里不正确?


import re

string = "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', '']


喵喵时光机
浏览 212回答 2
2回答

海绵宝宝撒

用pattern = r'car(?:pet)?'反而。这?:使组无法捕获(请参阅正则表达式语法文档),这findall与它返回捕获组列表(如果您的模式中存在捕获组列表)完全不同:>>> re.findall(pattern, "carpet and car")['carpet', 'car']

DIEA

原因在以下re&nbsp;文档中findall()提到:以字符串列表的形式返回字符串中模式的所有非重叠匹配项。从左到右扫描字符串,并按找到的顺序返回匹配项。如果模式中存在一个或多个组,则返回组列表;如果模式有多个组,这将是一个元组列表。结果中包含空匹配项。如果您想要预期的结果,请使用finditer().
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python