我正在尝试将那些连续字母超过 3 个的单词替换为真的。
pattern = re.compile(r"(.)\1\1{2,}", re.DOTALL)
return pattern.sub(r"\1\1\1", text)
我不能让它工作有人可以帮忙吗?
我正在尝试将那些连续字母超过 3 个的单词替换为真的。
pattern = re.compile(r"(.)\1\1{2,}", re.DOTALL)
return pattern.sub(r"\1\1\1", text)
我不能让它工作有人可以帮忙吗?
您的解决方案实际上似乎工作正常:
>>> 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'
我建议在不需要时不要使用正则表达式。这个任务可以很容易地完成,以一种更易读的方式,具有线性时间和恒定空间复杂度(不确定正则表达式)。
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))