2013-10-17 36 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)