Python re with group:提取字符串中的char重复以及char是什么

时间:2016-04-16 19:28:47

标签: python regex

我发现了这个:

>>> re.findall(r'((.)\2*)',s)
[('111', '1'), ('22', '2'), ('1', '1')]
>>> s
'111221'
>>> 

我无法跟随\ 2 *,正则表达式如何工作:第一组给出 我是第二组char重复的。太奇妙了!

\ 2表示第二组,但这里的第二组是什么?!

注意:这是为了获得字符串中字符重复的次数。

2 个答案:

答案 0 :(得分:2)

\2是对捕获组2中捕获的内容的反向引用。
例如,如果第2组抓取b,则\2+只能匹配bbb等。
相当于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)