python正则表达式搜索和findall

时间:2018-11-29 06:01:15

标签: python regex python-3.x

下面是我的代码。我的理解是我的模式说你必须满足汽车和宠物的要求。例如,检查单词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', '']

2 个答案:

答案 0 :(得分:1)

re documentation of findall()中提到了原因:

  

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

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

答案 1 :(得分:1)

使用

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

相反。 ?:使捕获组变为非捕获组(请参见regex syntax docs),这与findall有所不同,因为它返回捕获组的列表(如果您的模式中存在捕获组的列表):< / p>

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