繁体   English   中英

Python 正则表达式 Findall 非贪婪

[英]Python Regex Findall non-greedy

我对正则表达式比较陌生,我似乎很难理解贪婪与非贪婪搜索(如果这确实是这里的问题)。 假设我有一个简单的文本,例如:

# 数字:4 A 3 B

我的目标是运行 findall 以获得类似以下 output 的内容:

['#号:','4 A 3 B','4 A','3 B']

因此,如果我将以下正则表达式与 findall 一起使用,我希望它能够工作:

matches = re.findall(r"(# numbers:)(((?:\s\d)(?:\s\D))*)", "# numbers: 4 A 3 B")

然而,实际的 output 是这样的:

[('# 个数字:', '4 A 3 B', '3 B')]

有人可以解释为什么组 ((\s\d)(\d\D)) 只匹配“3 B”而不匹配“4 A”吗? 我认为这与 * 的贪婪与非贪婪搜索有关,这是真的吗? 如果是这样,你能解释一下如何解决这个问题吗?

提前致谢!

我会在这里使用re.findall两次。 首先,提取数字/非数字文本系列,然后再次使用re.findall查找元组:

inp = "# numbers: 4 A 3 B"
text = re.findall(r'^# numbers:\s+(.*)$', inp)[0]
matches = re.findall(r'(\d+)\s+(\D+)', text)
print(matches)  # [('4', 'A '), ('3', 'B')]

暂无
暂无

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

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