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

时间:2010-01-16 15:43:28

标签: python

我有这个字符串:

mystring = 'Here is  some   text   I      wrote   '

如何将double,triple(...)空格替换为一个空格,以便我得到:

mystring = 'Here is some text I wrote'

4 个答案:

答案 0 :(得分:522)

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

' '.join(mystring.split())

拆分和联接执行你明确询问的任务 - 此外,他们还会执行你没有谈到的额外的任务,但在你的例子中看到,删除尾随空格; - )。

答案 1 :(得分:110)

import re

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

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

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

答案 2 :(得分:32)

为完整起见,您还可以使用:

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's split/join solution的执行速度至少同样快(通常会更快)。

在您的示例中,使用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]


修改

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

答案 3 :(得分:-16)

string.replace("  ","")

消除所有偶数空格