【问题标题】:Removing duplicate instances of a character using a regex expression using python使用python使用正则表达式删除字符的重复实例
【发布时间】:2016-12-10 04:21:22
【问题描述】:

这是我尝试过的:

(.)(?=.*\1)

这会删除所有重复的实例,只留下最后一个实例,即。

telnet -> lnet

我想要这个结果:

telnet -> teln

我该怎么做?我试着向后看,但据我所知,它只接受固定长度。

需要为此找到一个正则表达式。我知道其他方法可以在没有正则表达式的情况下实现这一目标

【问题讨论】:

  • "需要为此找到一个正则表达式。"真的吗?为什么?
  • 我只是想知道这是否可能。我认为这在 .NET 中是可能的,但在 python 中,想不出一个正则表达式。直接的方法很简单,这是出于好奇。
  • @TigerhawkT3 您能否将我的问题取消标记为重复项,或者更好的是,将其链接到更合适的重复项(如果存在)。
  • 根据this,没有单一的正则表达式操作可以做到这一点。
  • 可以使用 PyPi 正则表达式模块。

标签: python regex


【解决方案1】:

纯正则表达式解决方案是不可能的。不过你可以尝试使用回调函数。

z=[]
def fun(matchobj):
    if matchobj.group(1) in z or matchobj.group(2) in z:
        return ''
    else:
        if matchobj.group(1):
             z.append(matchobj.group(1))
        else:
             z.append(matchobj.group(2))
        return z[-1]



x="telnet"
print re.sub(r"(.)(?=.*\1)|(.)", fun, x)

【讨论】:

    【解决方案2】:

    有点'hack'会是......在前瞻之前和之后反转字符串

    import re
    
    expr = r'telnetrer'[::-1]
    pr = re.sub(r'(.)(?=.*\1)', r'', expr)[::-1]
    
    print(pr)
    

    输出

    >>> telnr
    

    【讨论】:

      猜你喜欢
      • 2011-06-02
      • 1970-01-01
      • 1970-01-01
      • 2018-01-26
      • 1970-01-01
      • 2019-05-12
      • 1970-01-01
      • 1970-01-01
      • 2021-11-01
      相关资源
      最近更新 更多