0

我正在尝试将那些连续字母超过 3 个的单词替换为真的。

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

我不能让它工作有人可以帮忙吗?

4

2 回答 2

2

您的解决方案实际上似乎工作正常:

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

但是根据评论,您想替换xyyyxxyyx,但您已经为其中至少 4 个指定了正则表达式,因此只会xyyyyx被替换...只需更改此行:

>>> reg = re.compile( r"(.)\1{2,}")
>>> reg.sub(r'\1\1', 'fooo baaaar actuallly')
'foo baar actually'
于 2013-04-19T17:20:53.253 回答
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))
于 2013-04-19T19:34:31.253 回答