我有这个字符串:
mystring = 'Here is some text I wrote '
如何将double,triple(...)空格替换为一个空格,以便我得到:
mystring = 'Here is some text I wrote'
答案 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(" ","")
消除所有偶数空格