我有这个字符串:
mystring = 'Here is some text I wrote '
Run Code Online (Sandbox Code Playgroud)
我怎样才能将double,triple(...)空格替换为一个空格,以便我得到:
mystring = 'Here is some text I wrote'
Run Code Online (Sandbox Code Playgroud)
Ale*_*lli 590
一个简单的可能性(如果你宁愿避免RE)是
' '.join(mystring.split())
Run Code Online (Sandbox Code Playgroud)
拆分和连接执行您明确询问的任务 - 此外,他们还会执行您未讨论的额外任务,但在您的示例中可以看到,删除尾随空格;-).
hro*_*est 133
import re
re.sub('\s+', ' ', mystring).strip()
Run Code Online (Sandbox Code Playgroud)
这也将替换所有选项卡,换行符和其他"类似空格"的字符.
该strip()遗嘱远程任意开头和结尾的空格.
Dav*_*d C 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(' ', ' ')
Run Code Online (Sandbox Code Playgroud)
这将在具有相对较少空格的字符串上快速工作(比re在这些情况下更快).
在任何情况下,Alex Martelli的分离/加入解决方案至少执行得非常快(通常更加如此).
在您的示例中,使用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]
Run Code Online (Sandbox Code Playgroud)
编辑:
刚刚看到这篇文章提供了这些方法的速度相当长的比较.