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

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

我有这根绳子:

mystring = 'Here is  some   text   I      wrote   '

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

mystring = 'Here is some text I wrote'

您可能应该说"用一个空格替换多个空格",因为空格是一类字符(制表符、换行符等)。

一个简单的可能性是

' '.join(mystring.split())

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

哦,酷,我在摸索一个类似的解决方案,但使用了拆分("")和过滤器来删除空元素。我从不知道分裂,没有这样的论据。这个速度也快得多,timeit.py给了我大约0.74的usec,而正则表达式为5.75的usec。

@是的,是的,x.split()和x.split(None)在空格序列(包括制表符、换行符等)上进行了拆分,就像re's \s的长度为1+,而且速度非常快。所以,总是乐于助人!

这是一个非常优雅的解决方案,但我想说的是,这也将删除任何换行符。

@当然,trudolf,因为换行符是空白的——'

'.isspace()是True——所以任何没有替换的代码都会违反问题的要求(当然,问题的未表达意图可能不同于它的非常明确的表达,但是,读心术不是一种非常广泛的技能——)。

import re

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

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

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

如果您真的只想替换空格(""),请使用re.sub(' +', ' ', mystring).strip()

对python 3使用re.sub(r'\s+', ' ', mystring).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('  ', ' ')

它可以在空间相对较少的字符串上快速工作(在这种情况下比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]

< BR>编辑:

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

线条比其他线条多,因此"Python"更少,但更清晰。

string.replace(" ","")

所有偶数空格都被删除

如果您只有两个空格,并且不能完全解决问题,那么这将导致错误。

错了。对于给定的例子,它甚至不起作用,因为它会导致'Here issome text Iwrote '。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值