对于元字符+
,模式必须至少出现一次。在尝试匹配此字符串中的 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/