我正在寻找一个正则表达式来将字符串中任何字符的多次出现限制为两个。
例如:Reallllly like
和Sooooooo good
应转换为Really like
和So good
。
答案 0 :(得分:3)
将三个或更多相同字符的序列替换为两个。
re.sub(r'(.)\1{2,}', r'\1\1', "Realllllly goooood")
编辑:修正了拼写错误。
答案 1 :(得分:0)
我不知道如何使用正则表达式执行此操作,但itertools.groupby
效果很好:
>>> from itertools import groupby
>>> g = groupby('reallllly goood')
>>> ''.join(''.join(list(x)[:2]) for _,x in g)
>>> 'really good'
答案 2 :(得分:0)
来自@pacholik的答案几乎是正确的。
正确表达:
re.sub(r'(.)\1{2,}', r'\1\1', "Realllllly goood")
我们替换多出3次出现的子字符串,而不是4次(第一次(.)
和2次或更多次重复\1{2,}
替换为第一个字符\1\1
)。