小编典典

python正则表达式:re.findall(r“(do | re | mi)+”,“ mimi rere midore”)

python

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

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

产生这个结果,

['mi', 're', 're'].

我的预期结果是[‘mimi’,’rere’,’midore’] …

但是,当我使用此正则表达式时,

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

它产生预期的结果。

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


阅读 279

收藏
2020-12-20

共1个答案

小编典典

区别在于捕获组。在捕获组中, findall()返回捕获的内容。没有捕获组,将返回整个比赛。 __

在第一个示例中,组 捕获两个字符(重复或不重复)。在第二个示例中,整个比赛包括所有重复。

关于区别的re.findall()文档非常清楚:

返回字符串中模式的所有非重叠匹配项,作为字符串列表。[…]如果模式中存在一个或多个组,则返回一个组列表;否则,返回一个列表。如果模式包含多个组,则这将是一个元组列表。

如果你的(do|re|mi)+模式是一个更大模式的一部分,你想findall()
返回字符的全部重复设置,使用非捕获组与围绕整个捕获组的两个字母的选项:

r'Some example text: ((?:do|re|me)+)'
2020-12-20