2013-10-17 64 views
2

我試圖找到重複3次或更多字符來代替3個或更多相同的字符,例如我要採取以下字符串:Python的應用re.sub 1

'aaa''buuuuut''oddddddddd'

,並只用一個取代三個或三個以上的信件的所有出現:

'a''but''od')。

我試過下面的代碼

s=re.sub(r'(\w)\3*',r'(\w)',s) 

,但它會導致編譯錯誤。

我需要使用哪些正則表達式?

回答

6

看看這個:

>>> mystr = 'buuuuuttttt' 
>>> re.sub(r'(.)\1{2,}', r'\1', mystr) 
'but' 
>>> mystr = 'buttt' 
>>> re.sub(r'(.)\1{2,}', r'\1', mystr) 
'but' 
>>> 
+0

@fanti我試過你的正則表達式上 'buuuuuttttt',但它會導致 'T'。可能是什麼問題呢? – ytrewq

+0

@CosmicRabbitMediaInc - 修正了它。 – iCodez

+0

thanx!接受了答案:) – ytrewq

3
>>> s = 'abbcccdddd' 
>>> s = re.sub(r'(\w)\1(\1+)',r'\1',s) 
>>> s 
'abbcd' 
+0

這個看起來比're.sub(r'(。)\ 1 {3,}',r'\ 1',mystr)' – JadedTuna

+0

更容易.. 。我發現我已經將我的代碼從(\ w)(\ 1+)修復爲(\ w)\ 1(\ 1+),並以fanti發佈的內容結束 – Pines

1

也許嘗試這樣的事:

s = re.sub(r'(\w)\1\1+', r'\1', s)