我正在尋找一個正則表達式,以將字符串中任何字符的多次出現限制爲兩次。正則表達式將任何字符的多次出現限制爲兩個
例如:Reallllly like
和Sooooooo good
應該轉換爲Really like
和So good
。
我正在尋找一個正則表達式,以將字符串中任何字符的多次出現限制爲兩次。正則表達式將任何字符的多次出現限制爲兩個
例如:Reallllly like
和Sooooooo good
應該轉換爲Really like
和So good
。
我不知道如何使用正則表達式做,但itertools.groupby
效果很好:
>>> from itertools import groupby
>>> g = groupby('reallllly goood')
>>> ''.join(''.join(list(x)[:2]) for _,x in g)
>>> 'really good'
只有兩個替換的三個或三個以上相同的字符序列。
re.sub(r'(.)\1{2,}', r'\1\1', "Realllllly goooood")
編輯:固定錯字。
幾乎正確,更正 - http://stackoverflow.com/a/32987851/1975086 –
從@pacholik回答幾乎是正確的。
正確表達:
re.sub(r'(.)\1{2,}', r'\1\1', "Realllllly goood")
我們取代,其中更然後出現3次,而不是4(第一(.)
和2首或更多個重複\1{2,}
用2次重複的第一字符\1\1
的替換)的子串。
但它實際上會結束'soo good' – Manu
將'Sooooooo good'轉換爲'so good'很容易,但是像'真正'轉換爲'真的很喜歡'很難。 –
@KevinGuan:其實我想其實反之亦然。 :)除非你的規則是3+ - > 1,2 - > 2(這很奇怪,可能,但很奇怪。) – Amadan