【问题标题】:How to remove a repetitive chain of a char in an string in python [closed]如何在python中删除字符串中的重复字符链[关闭]
【发布时间】:2017-08-31 21:27:50
【问题描述】:

我有一个像Hiiiiiiiiiiii 这样的字符串,它可能包含一个字符链,这里是i,它重复了不止一次。我想用一个替换这个is 链i 并获得Hi 作为输出。另一个例子是给定单词eeeeeeemadeeefghddd 我想获得emadefghd 作为输出。我怎样才能在python 中做到这一点?

【问题讨论】:

    标签: python regex


    【解决方案1】:

    你可以在这里使用itertools

    >>> import itertools
    >>> s = "Hiiiiiiiiiiii"
    >>> ''.join(i for i, _ in itertools.groupby(s))
    'Hi'
    
    >>> s = 'eeeeeeemadeeefghddd'
    >>> ''.join(i for i, _ in itertools.groupby(s))
    'emadefghd'
    

    【讨论】:

    • @TimPietzcker 啊,对,这个解决方案假设一个给定字母的序列只能出现一次。
    • @TimPietzcker 感谢您指出,itertools 怎么样 :)
    • 嗯。这没有错,但也不是很优雅。正则表达式正是这项工作的正确工具。
    • @timgeb 更新了我的答案
    • 好的,@TimPietzcker 我会用正则表达式试试这个,再次感谢,我仍处于学习阶段,所以我肯定需要这种输入,谢谢分享
    【解决方案2】:

    您可以使用相当简单的正则表达式将每个重复的字符替换为字符本身。

    >>> import re
    >>> re.sub(r'(.)\1+', r'\1', 'Hiiiiiiiiiiii')
    'Hi'
    >>> re.sub(r'(.)\1+', r'\1', 'eeeeeeemadeeefghddd')
    'emadefghd'
    

    【讨论】:

      【解决方案3】:

      您可以使用enumerate() 循环遍历string 并检查每个字符与之前的字符,例如:

      s = 'eeeeeeemadeeefghddd'
      result = ''
      for i, c in enumerate(s):
          if i == 0:
              result += c
          else:
              if c != s[i-1]:
                  result += c
      print result
      

      输出:

      emadefghd
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-21
        • 1970-01-01
        • 2021-03-17
        相关资源
        最近更新 更多