区别在于捕获组。在捕获组中, 仅findall()
返回捕获的内容。没有捕获组,将返回整个比赛。 __
在第一个示例中,组 仅 捕获两个字符(重复或不重复)。在第二个示例中,整个比赛包括所有重复。
关于区别的re.findall()
文档非常清楚:
返回字符串中模式的所有非重叠匹配项,作为字符串列表。[…]如果模式中存在一个或多个组,则返回一个组列表;否则,返回一个列表。如果模式包含多个组,则这将是一个元组列表。
如果你的(do|re|mi)+
模式是一个更大模式的一部分,你想findall()
以 仅 返回字符的全部重复设置,使用非捕获组与围绕整个捕获组的两个字母的选项:
r'Some example text: ((?:do|re|me)+)'