我不明白为什么这个正则表达式,
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/