我明白模式r'([a-z]+)\1+'
在搜索字符串中寻找重复的多字符模式,但我不明白为什么在k2
的情况下答案不是'aaaaa'(5个'a'):
import re
k1 = re.search(r'([a-z]+)\1+', 'aaaa')
k2 = re.search(r'([a-z]+)\1+', 'aaaaa')
k3 = re.search(r'([a-z]+)\1+', 'aaaaaa')
print(k1) # <_sre.SRE_Match object; span=(0, 4), match='aaaa'>
print(k2) # <_sre.SRE_Match object; span=(0, 4), match='aaaa'>
print(k3) # <_sre.SRE_Match object; span=(0, 6), match='aaaaaa'>
Python 3.6.1
x
,(x)x
的长度都不可能是奇数。 - Jongware+
是贪婪的。它试图尽可能匹配更多内容。要么将其更改为([a-z]+?)\1+
,要么使用锚点([a-z]+)\1+\b
。 - ctwheels([a-z]+)
将匹配与\1
完全相同的数量和内容。因此,在\1
中添加一个+
量词不会匹配超过第1组匹配的内容,这是不可能的。这也会导致一个均匀的匹配。如果你将它改为([a-z])\1+
,它将匹配第1组捕获的2个或更多内容。 - user557597