python - 为什么这个正则表达式匹配给出这个结果?

标签 python regex regex-greedy

对于元字符+,模式必须至少出现一次。在尝试匹配此字符串中的 a[ab]+ 时:abbaaabbbbaaaaa 使用 python 的 re.findall(),我希望它返回所有这些可能的匹配从第一个字母 a 开始,如 ['ab', 'abb', 'abba', 'abbaaa', ... etc] 直到达到整个字符串(这也是一个匹配项)。此外,我认为它也适用于字符串中的每个 a 而不仅仅是第一个,所以我想匹配的结果会不止于此。

这是我使用的代码:

import re

string = 'abbaaabbbbaaaaa'
matches = re.findall('a[ab]+', string)
for match in matches:
    print(match)

但是,结果只是abbaaabbbbaaaaa(整个字符串)。那么我理解错了什么?

最佳答案

a[ab]+ 将匹配单个字符串(假设它完全匹配)。整个字符串 abbaaabbbbaaaaa 与该正则表达式匹配,因此您得到一个匹配项:整个字符串。它不会为您提供可能匹配的每一小块。

换句话说,a[ab] 的每次匹配都会“消耗”一个字符。即,匹配字符“用完”,程序移动到下一个字符。通常,这就是您想要的:您想查看整个字符串是否匹配,或者有多少匹配,而不是查找构成更大匹配的所有零散部分。

关于python - 为什么这个正则表达式匹配给出这个结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33687087/

相关文章:

python - 具有数据源动态更新的 Bokeh 应用程序

python - H2O 和 Pandas SparseDataFrame

python - Django 表单中的名称错误 : name 'request' is not defined,

javascript - 正则表达式验证电话号码的 3 种特定形式

python - 使用 dropout 和 CudnnLSTM 进行训练和验证

c# - .NET 中是否有匹配或异常正则表达式

c++ - 删除正则表达式匹配

regex - 一个多行、不同贪婪的正则表达式

java - 正则表达式根据允许的分隔符的第一次出现来分割过滤字符串并获取键、运算符、值

regex - 为什么我的非贪婪 Perl 正则表达式不匹配?