我试图用真正的替换那些连续字母超过3个例子的单词。
pattern = re.compile(r"(.)\1\1{2,}", re.DOTALL)
return pattern.sub(r"\1\1\1", text)
我无法让任何人都能帮忙吗?
答案 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))