【问题标题】:How to delete copies of character from string using regex?如何使用正则表达式从字符串中删除字符副本?
【发布时间】:2019-11-16 17:30:12
【问题描述】:

我想在此示例中删除“i”的副本,尝试使用组但它不起作用。我哪里做错了?

import re

a = '123iiii'
b = re.match('.*i(i+)', a)
print(b.group(1))
>>> i
a = re.sub(b.group(1), '', a)
print(a)
>>> 123

所需的结果是“123i”。
谢谢你的回答。

【问题讨论】:

  • 你只想留下一个吗?

标签: python regex regex-group


【解决方案1】:

也许,

([^i]*i)i*([^\r\n]*)

和替换,

\1\2

也许可以调查一下。

测试

import re

string = '''
123iiii
123iiiiabc
123i
'''

expression = r'([^i]*i)i*([^\r\n]*)'

print(re.sub(expression, r'\1\2', string))

输出

123i
123iabc
123i

如果您希望简化/修改/探索表达式,请在regex101.com 的右上角面板中进行说明。如果您愿意,您还可以在this link 中观看它如何与一些示例输入相匹配。


正则表达式电路

jex.im 可视化正则表达式:

【讨论】:

    【解决方案2】:

    看来你需要的是:

    import re
    
    a = '123iiii'
    a = re.sub(r"i+", "i", a)
    
    print(a)
    >>> 123i
    

    【讨论】:

      【解决方案3】:

      您可以通过简单地使用sub 函数将i's 序列替换为单个i 来实现您的目标

      import re
      
      a = '123iiii'
      a = re.sub(r'i+', 'i', a)
      print(a)
      

      【讨论】:

        【解决方案4】:

        即使您在字符串中的多个位置都有 i,以下内容也将起作用。

        import re
        
        s = '123iiii657iii'
        re.sub('i+','i',s)
        

        输出

        '123i675i'
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-09-07
          • 2011-03-22
          • 1970-01-01
          • 1970-01-01
          • 2013-11-03
          • 1970-01-01
          • 1970-01-01
          • 2013-05-23
          相关资源
          最近更新 更多