我发现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)
我想你在这里问的问题是为什么它会回复:
>>> 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)
| 归档时间: |
|
| 查看次数: |
298 次 |
| 最近记录: |