为了账号安全,请及时绑定邮箱和手机立即绑定

python正则表达式搜索和findall

python正则表达式搜索和findall

喵喵时光机 2021-09-01 14:40:55
下面是我的代码。我的理解是我的模式说你必须满足汽车和宠物是选项。即检查单词汽车和地毯。现在重新搜索匹配地毯,这很好。但是 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']


查看完整回答
反对 回复 2021-09-01
?
DIEA

TA贡献1820条经验 获得超2个赞

原因在以下re 文档中findall()提到:

以字符串列表的形式返回字符串中模式的所有非重叠匹配项。从左到右扫描字符串,并按找到的顺序返回匹配项。如果模式中存在一个或多个组,则返回组列表;如果模式有多个组,这将是一个元组列表。结果中包含空匹配项

如果您想要预期的结果,请使用finditer().


查看完整回答
反对 回复 2021-09-01
  • 2 回答
  • 0 关注
  • 211 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号