【发布时间】:2016-01-23 12:37:44
【问题描述】:
我正在创建一些将替换空格的代码。 我要双格变成单格,单格变成空。
例子:
string = "t e s t t e s t"
string = string.replace(' ', ' ').replace(' ', '')
print (string)
输出是“testest”,因为它替换了所有空格。 如何使输出“测试测试”?
谢谢
【问题讨论】:
我正在创建一些将替换空格的代码。 我要双格变成单格,单格变成空。
例子:
string = "t e s t t e s t"
string = string.replace(' ', ' ').replace(' ', '')
print (string)
输出是“testest”,因为它替换了所有空格。 如何使输出“测试测试”?
谢谢
【问题讨论】:
正则表达式方法无疑是可能的,但为了快速解决,首先在双空格上拆分,然后在使用推导删除拆分中每个元素中的单个空格后在单个空格上重新加入:
>>> string = "t e s t t e s t"
>>> ' '.join(word.replace(' ', '') for word in string.split(' '))
'test test'
【讨论】:
只是另一个想法:
>>> s = 't e s t t e s t'
>>> s.replace(' ', ' ').replace(' ', '').replace(' ', '')
'test test'
似乎更快:
>>> timeit(lambda: s.replace(' ', ' ').replace(' ', '').replace(' ', ''))
2.7822862677683133
>>> timeit(lambda: ' '.join(w.replace(' ','') for w in s.split(' ')))
7.702567737466012
而且正则表达式(至少是这个)更短但速度慢很多:
>>> timeit(lambda: re.sub(' ( ?)', r'\1', s))
37.2261058654488
【讨论】:
我喜欢这个正则表达式解决方案,因为您可以轻松阅读正在发生的事情:
>>> import re
>>> string = "t e s t t e s t"
>>> re.sub(' {1,2}', lambda m: '' if m.group() == ' ' else ' ', string)
'test test'
我们搜索一到两个空格,用空字符串替换一个空格,用一个空格替换两个空格。
【讨论】: