Python如何消除3个或更多后续字母

时间:2013-04-19 17:09:43

标签: python

我试图用真正的替换那些连续字母超过3个例子的单词。

pattern = re.compile(r"(.)\1\1{2,}", re.DOTALL)
return pattern.sub(r"\1\1\1", text)

我无法让任何人都能帮忙吗?

2 个答案:

答案 0 :(得分:2)

您的解决方案实际上似乎正常运行:

>>> import re
>>> a = 'foooooooo baaaar'
>>> reg = re.compile( r"(.)\1\1{2,}")
>>> reg.sub(r'\1\1', a)
'foo baar'

但根据评论,您希望将xyyyx替换为xyyx,但您已为其中至少4个指定了正则表达式,因此只有xyyyyx被替换为......改变这一行:

>>> reg = re.compile( r"(.)\1{2,}")
>>> reg.sub(r'\1\1', 'fooo baaaar actuallly')
'foo baar actually'

答案 1 :(得分:0)

我建议不要使用正则表达式。这个任务可以很容易地完成,不会以更易读的方式,线性时间和恒定的空间复杂度(不确定正则表达式)。

def filter_repetitions(text, max_repetitions=0):
    last_character = None
    repetition_count = 0
    for character in text:
        if character == last_character:
            repetition_count += 1
        else:
            last_character = character
            repetition_count = 0
        if repetition_count <= max_repetitions:
            yield character

print ''.join(filter_repetitions("fooo baaaar actuallly", 1))