用Python中的单个空白replace多个空格

我有这个string:

mystring = 'Here is some text I wrote ' 

我怎样才能将双重,三重(…)空格replace为一个空格,以便我得到:

 mystring = 'Here is some text I wrote' 

一个简单的可能性(如果你宁愿避免RE)是

 ' '.join(mystring.split()) 

拆分和连接执行你明确要求的任务 – 另外,他们也做了额外的一个,你不谈,但在你的例子中看到,删除尾随空格;-)。

 import re re.sub( '\s+', ' ', mystring ).strip() 

这也将替代所有的标签,换行符和其他“类空白”字符。

strip()最后会根据你的要求切断任何尾随的空白。

为了完整性,您还可以使用:

 mystring = mystring.strip() # the while loop will leave a trailing space, # so the trailing whitespace must be dealt with # before or after the while loop while ' ' in mystring: mystring = mystring.replace(' ', ' ') 

这将在空间相对较less的string上快速工作(在这种情况下比在这种情况下更快)。

在任何情况下, Alex Martelli的拆分/join解决scheme的执行速度至less一样快(通常显着更多)。

在你的例子中,使用timeit.Timer.repeat()的默认值,我得到以下时间:

 str.replace: [1.4317800167340238, 1.4174888149192384, 1.4163512401715934] re.sub: [3.741931446594549, 3.8389395858970374, 3.973777672860706] split/join: [0.6530919432498195, 0.6252146571700905, 0.6346594329726258] 

编辑:

刚刚遇到这个post ,提供了这些方法的速度相当长的比较。

 string.replace(" ","") 

所有偶数的空间都被消除了