我正在创建一些代码来替换空格。 我想要一个双空间变成一个单一的空间和一个空间变成什么都不是。如何替换类似的字符串
实施例:
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'
我们搜索一个或两个空格,并用空字符串替换一个空格,但用一个空格替换两个空格。
在任何情况下,我都不会太在意速度,但我喜欢首先将空间加倍的想法。 (我认为它是否比分裂和重新加入的方法更清晰,但至少值得了解。)由于某些原因,当你编辑你的答案以添加正则表达式时,间距就被搞砸了,这会破坏你的主元素回答。 –
@JohnY是的,我对速度并不太在意,无论如何,我只是有点好奇,所以我做了测试并分享了它。你是什么意思间距被搞砸了?我确实改变了空格(用零替换三,而不是用一个替换四),但它仍然可以工作。 –
我一定误解了它。尽管如此,我发现在4个空格变为1时很容易看到你正在做什么。另外,如果输入以三个相邻空格开始,这会稍微改变效果。当然,OP从来没有明确说过在这种情况下应该发生什么,也可能没有关系,但我的直觉是三重空间应该被看作更像是“双空间接着一个空间”(变成单一)比“三个单一的空间”(变空)。 –