Python - 查找相同字符的序列

时间:2016-07-20 16:16:07

标签: python regex

我正在尝试使用正则表达式来匹配字符串中相同字符的一个或多个实例的序列。

示例:

string = "55544355"
# The regex should retrieve sequences "555", "44", "3", "55"

我可以提供一些提示吗?

3 个答案:

答案 0 :(得分:5)

您可以使用re.findall()((.)\2*)正则表达式:

>>> [item[0] for item in re.findall(r"((.)\2*)", string)]
['555', '44', '3', '55']

关键部分位于外部捕获组内 - (.)\2*。在这里,我们通过(.)捕获单个字符,然后通过组号引用此字符:\2。组号为2,因为我们有一个编号为1的外部捕获组。*表示0次或更多次。

你也可以用一个捕获组和re.finditer()来解决它:

>>> [item.group(0) for item in re.finditer(r"(.)\1*", string)]
['555', '44', '3', '55']

答案 1 :(得分:3)

使用itertools.groupby

,无需正则表达式即可轻松完成此操作
>>> from itertools import groupby
>>> s = '55544355'
>>> [''.join(g) for _, g in groupby(s)]
['555', '44', '3', '55']

答案 2 :(得分:1)

可能不是这里最好的选择,但为了多样化,这个逻辑怎么样:

>>> def f(s):
        l = []
        c = s[0]
        for x in s:
            if x in c:
                c += x
                continue
            l.append(c)
            c = x
        l.append(c)
        return l

>>> f('55544355')
['555', '44', '3', '55']
>>> f('123444555678999001')
['1', '2', '3', '444', '555', '6', '7', '8', '999', '00', '1']