如何在Python中使用正则表达式中仅包含重复字符组的字符串进行描述

时间:2016-10-11 18:01:54

标签: python regex

即。 'aaeegggwwqqqqq', 'ttteeyyjjj'

我试过了r'(([a-z])\1*)+$',但得到错误说:不能引用开放组。

任何人都可以帮我搞清楚吗?谢谢!

2 个答案:

答案 0 :(得分:0)

确实

(([a-z])\2*)+$

工作?

快速查看,(([a-z])\2*)是第一组,([a-z])是第二组。看起来你打算引用第二组。

答案 1 :(得分:0)

您应该使用非捕获外部组:

re.match(r'(?:([a-z])\1+)+$', s)

请参阅regex demo

这样,您不必重新调整模式中的反向引用。

另一种方法是使用命名的捕获组和命名的反向引用:

re.match(r'((?P<l>[a-z])(?P=l)+)+$', s)

请参阅this regex demo

在这里,(?P<l>[a-z])将一个ASCII小写字母捕获到Group&#34; l&#34;和(?P=l)+匹配1个或多个(+匹配量化子模式的一次或多次出现次数尽可能多次)捕获的字母的出现次数。

Python demo

import re
s = ["aaeegggwwqqqqq", "ttteeyyjjj", "sdfghj"]
for x in s:
    if re.match(r'(?:([a-z])\1+)+$', x):
        print("{0} matches the pattern".format(x))

输出:

aaeegggwwqqqqq matches the pattern
ttteeyyjjj matches the pattern