在Python中用单个空格替换多个空格

Substitute multiple whitespace with single whitespace in Python

本问题已经有最佳答案,请猛点这里访问。

我有这根绳子:

1
mystring = 'Here is  some   text   I      wrote   '

如何将双空格、三空格(…)替换为一个空格,以便:

1
mystring = 'Here is some text I wrote'


一个简单的可能性是

1
' '.join(mystring.split())

split和join执行您明确要求的任务——另外,它们还执行您不谈论但在示例中看到的额外任务,删除尾随空格;-)。


1
2
3
import re

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

这也将替换所有制表符、换行符和其他类似于空格的字符。

strip()将远程处理任何前导和尾随空格。


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

1
2
3
4
5
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('  ', ' ')

它可以在空间相对较少的字符串上快速工作(在这种情况下比re更快)。

在任何情况下,Alex Martelli的分割/连接解决方案的执行速度都至少一样快(通常明显更快)。

在您的示例中,使用timeit.timer.repeat()的默认值,我得到以下时间:

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

< BR>编辑:

刚刚看到这篇文章,它提供了这些方法的速度的相当长的比较。


1
string.replace(" ","")

所有偶数空格都被删除