【发布时间】:2026-01-16 06:35:01
【问题描述】:
我对正则表达式比较陌生,我似乎很难理解贪婪与非贪婪搜索(如果这确实是这里的问题)。假设我有这样一个简单的文本:
# 数字:4 A 3 B
我的目标是运行 findall 以获得类似以下输出:
['# number:', '4 A 3 B', '4 A', '3 B']
因此,如果我将以下正则表达式与 findall 一起使用,我希望它可以工作:
matches = re.findall(r"(# numbers:)(((?:\s\d)(?:\s\D))*)", "# numbers: 4 A 3 B")
然而,实际的输出是这样的:
[('#个数字:', '4 A 3 B', '3 B')]
有人可以解释为什么组 ((\s\d)(\d\D)) 只匹配“3 B”而不匹配“4 A”吗?我认为这与 * 的贪婪与非贪婪搜索有关,这是真的吗?如果是这样,您能解释一下如何解决这个问题吗?
提前致谢!
【问题讨论】: