可以搜索(r'(ab)+',"ababababab")匹配python中的所有字符

0 python regex

我发现findall(r'(ab)+', "ababababab") 只能匹配["ab"]

>>> re.findall(r'(ab)+', "ababababab")
['ab']
Run Code Online (Sandbox Code Playgroud)

我只知道使用r'(?:ab)+'可以匹配所有的字符

>>> re.findall(r'(?:ab)+', "ababababab")
['ababababab']
Run Code Online (Sandbox Code Playgroud)

为什么会这样?


对不起,我可能不会清楚地说出我的问题

(?:ab)将'ab'作为一个整体,让我们做c = ab,所以c + = ababab ....

所以这很明显

>>> re.findall(r'(?:ab)+', "ababababab") <br>
['ababababab'] 
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么会发生这种情况:

>>> match=re.search(r'(ab)+', "ababababab") <br>
>>> match.group()<br>
'ababababab'
Run Code Online (Sandbox Code Playgroud)

Dav*_*rby 6

我想你在这里问的问题是为什么它会回复:

>>> re.findall(r'(ab)+', "ababababab")
['ab']
Run Code Online (Sandbox Code Playgroud)

答案是,如果模式中有一个或多个组,则findall将返回包含所有匹配组的列表.但是,正则表达式有一个在正则表达式中多次匹配的组,因此它需要匹配的最后一个值.

我想你想要的是这个:

>>> re.findall(r'(ab)', "ababababab")
['ab', 'ab', 'ab', 'ab', 'ab']
Run Code Online (Sandbox Code Playgroud)

或您发布的版本:

>>> re.findall(r'(?:ab)+', "ababababab")
['ababababab']
Run Code Online (Sandbox Code Playgroud)