我发现了这个:
>>> re.findall(r'((.)\2*)',s)
[('111', '1'), ('22', '2'), ('1', '1')]
>>> s
'111221'
>>>
我无法跟随\ 2 *,正则表达式如何工作:第一组给出 我是第二组char重复的。太奇妙了!
\ 2表示第二组,但这里的第二组是什么?!
注意:这是为了获得字符串中字符重复的次数。
答案 0 :(得分:2)
\2
是对捕获组2中捕获的内容的反向引用。
例如,如果第2组抓取b
,则\2+
只能匹配b
或bb
等。
相当于bb+
其中' b'可以是除换行符之外的任何字符。
( # (1 start)
( . ) # (2), Any character
\2* # Backreference to capture group 2, 0 to many times
) # (1 end)
答案 1 :(得分:2)
在您的示例中,捕获组1 \1
为((.)\2*)
,捕获组2 \2
为(.)
因为您没有使用第一个捕获组,所以您可以改为使用非捕获组:(?:(.)\1)