我不明白为什么这个正则表达式,

re.findall(r"(do|re|mi)+","mimi rere midore"),

产生这个结果,
['mi', 're', 're'].

我的预期结果是 ['mimi', 'rere', 'midore']...

但是,当我使用这个正则表达式时,
re.findall(r"(?:do|re|mi)+","mimi rere midore"),

它按预期生成结果。

你能告诉我两个正则表达式之间的区别吗?
谢谢你。

最佳答案

区别在于捕获组。对于捕获组,findall() 仅返回捕获的内容。如果没有捕获组,则返回整个匹配项。

在您的第一个示例中,该组仅捕获两个字符,无论是否重复。在第二个例子中,整个比赛包括任何重复。

re.findall() documentation 的区别很明显:



如果您的 (do|re|mi)+ 模式是更大模式的一部分,并且您希望 findall() 只返回完整的重复字符集,请为两个字母的选项使用非捕获组,并在整体周围设置一个捕获组:

r'Some example text: ((?:do|re|me)+)'

关于python 正则表达式 : re. findall(r"(do|re|mi) +","mimi rere midore"),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15547033/

10-12 21:46