【问题标题】:How to replace strings that are similar如何替换相似的字符串
【发布时间】:2016-01-23 12:37:44
【问题描述】:

我正在创建一些将替换空格的代码。 我要双格变成单格,单格变成空。

例子:

string = "t e s t  t e s t"
string = string.replace('  ', ' ').replace(' ', '')
print (string)

输出是“testest”,因为它替换了所有空格。 如何使输出“测试测试”?

谢谢

【问题讨论】:

    标签: python string replace


    【解决方案1】:

    正则表达式方法无疑是可能的,但为了快速解决,首先在双空格上拆分,然后在使用推导删除拆分中每个元素中的单个空格后在单个空格上重新加入:

    >>> string = "t e s t  t e s t"
    >>> ' '.join(word.replace(' ', '') for word in string.split('  '))
    'test test'
    

    【讨论】:

      【解决方案2】:

      只是另一个想法:

      >>> 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
      

      【讨论】:

      • 无论如何我都不会太在意速度,但我喜欢先将空间加倍的想法。 (我是否认为它比拆分和重新加入方法更清晰,但至少值得了解。)出于某种原因,当您编辑答案以添加正则表达式时,间距搞砸了,这会破坏您的主要回答。
      • @JohnY 是的,我也不太关心速度,我只是有点好奇,所以我做了测试并分享了它。你的意思是间距被搞砸了?我确实更改了空格(用零替换三个而不是用一个替换四个),但它仍然可以工作。
      • 我一定是看错了。尽管如此,我发现当 4 个空格比 1 个空格时更容易快速查看您在做什么。此外,如果输入以三个相邻空格开头,这会稍微改变效果。当然,OP 从来没有明确说过在这种情况下应该发生什么,这可能并不重要,但我的直觉是应该将三重空格更像是“双空格后跟一个空格”(变成单空格)而不是而不是“三个单空格”(变成空的)。
      • @JohnY 在我看来,如果可能有两个以上的连续空格,那么问题就会谈到这一点。另外,我的原始版本会“正确”处理三个空格,但不是四个(它会删除,而您可能会说它们应该变成两个)。因此,如果可能有两个以上的空间,那么无论如何它都可能注定要失败。
      【解决方案3】:

      我喜欢这个正则表达式解决方案,因为您可以轻松阅读正在发生的事情:

      >>> import re
      >>> string = "t e s t  t e s t"
      >>> re.sub(' {1,2}', lambda m: '' if m.group() == ' ' else ' ', string)
      'test test'
      

      我们搜索一到两个空格,用空字符串替换一个空格,用一个空格替换两个空格。

      【讨论】:

        猜你喜欢
        • 2014-06-09
        • 2018-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-31
        • 1970-01-01
        相关资源
        最近更新 更多