为什么使用括号时 re.findalll 和 re.finditer 的输出不同?



在Python 3.6中,为什么在下面的示例中,与re.finditer相比,re.findall返回不同的项目?

text = "He was carefully disguised but captured quickly by 10 caps."
print(re.findall(r"ca(p)", text))
for i in re.finditer(r"ca(p)", text):
print(i)

findall 返回 ['p', 'p'],而 finditer 返回两个 "cap"。只有当我使用括号时才会发生这种情况!

finditer返回匹配对象的可迭代对象,其中包含所有捕获的组,当您打印匹配的对象时,它会返回包含整个匹配字符串的第一个匹配组。

如果您希望字符串与捕获的组匹配,则需要使用group()接受捕获组数作为其参数的方法。

for i in re.finditer(r"ca(p)", text):
print(i.group(1))

另一方面,re.findall()返回列表中正则表达式中所有捕获的组匹配的字符串。它大致相当于以下finditer()代码:

[i for m in re.finditer(r"ca(p)", text) for i in m.groups()]

相关内容

  • 没有找到相关文章

最新更新