>>> re.findall(r"(?:do|re|mi)+", "mimi")
['mimi']
>>> re.findall(r"(do|re|mi)+", "mimi")
['mi']
根据我对定义的理解,它应该产生相同的答案。(...)
和应该之间的唯一区别(?:...)
是我们以后是否可以使用反向引用。我错过了什么吗?
(...)
匹配括号内的任何正则表达式,并指示组的开始和结束;组的内容可以在执行匹配后检索,并且可以稍后在字符串中使用 \number 特殊序列进行匹配,如下所述。要匹配文字 '(' 或 ')',请使用 ( 或 ),或将它们包含在字符类中:[(] [)]。
(?:...)
常规括号的非捕获版本。匹配括号内的任何正则表达式,但组匹配的子字符串在执行匹配后无法检索或稍后在模式中引用。