繁体   English   中英

python正则表达式搜索和findall

[英]python regex search and findall

下面是我的代码。 我的理解是我的模式说你必须满足汽车和宠物的要求。 例如,检查单词car和地毯是否都正确。现在重新搜索匹配地毯就可以了。但是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', '']

findall() re 文档中提到了原因:

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

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

采用

pattern = r'car(?:pet)?'

代替。 ?:使组不捕获(请参见regex语法docs ),这与findall有所不同,因为如果模式中存在捕获组的列表,它将返回捕获组的列表:

>>> re.findall(pattern, "carpet and car")
['carpet', 'car']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM