python - 无法理解 re.findall() 行为
问题描述
我在理解re.findall
. 从文档中引用:
返回字符串中模式的所有非重叠匹配,作为字符串列表。从左到右扫描字符串,并按找到的顺序返回匹配项。如果模式中存在一个或多个组,则返回组列表;如果模式有多个组,这将是一个元组列表。结果中包含空匹配项。
基于此,我希望以下行
re.findall(f"(a)|(b)|(c)","c")
产生结果
[(c)]
但是,它会产生结果
[('', '', 'c')]
我不明白为什么要包含两个空字符串,因为我在任何地方都看不到空匹配。
解决方案
这是因为有三个捕获组:
import re
print(re.findall(r"(a)|(b)|(c)","d"))
print(re.findall(f"(a)|(b)|(c)","c"))
print(re.findall(r"(?:a)|(?:b)|(?:c)","c"))
print(re.findall(f"(?:a)|(b)|(c)","c"))
print(re.findall(f"(?:a|b|c)","c"))
print(re.findall(r"a|b|c","c"))
输出
[]
[('', '', 'c')]
['c']
[('', 'c')]
['c']
['c']
推荐阅读
- postgresql - 如果我有一个查询,我在 timescaledb 中加入一个带有普通(非超)表的超表,我会从超表中获益吗
- laravel - 在资源集合中使用 whenLoaded 我得到了错误
- php - 为按钮提供批准和拒绝功能,并将其显示在 Laravel 的用户仪表板中
- java - Apache PDFBox:编码问题
- excel - Excel VBA 表单中的下一个和上一个按钮
- python - Python Pandas数据框根据清除字符串值并分配给新列的函数修改列值
- jquery - 如何在鼠标离开时所有 div 自动滚动反转
- javascript - 如何合并这两个 javascript 位?
- webassembly - 在 WASM 中调用我的 API 的最佳方式是什么?
- java - 尝试在 Freemarker 中输出 Double 金额时出现奇怪的字符