【问题标题】:Trying to get python RegExp to remove everything between brackets [ abc ]试图让 python RegEx 删除括号 [ abc ] 之间的所有内容
【发布时间】:2020-02-28 19:02:42
【问题描述】:

此正则表达式删除 $$ 之间的所有内容,但不删除 [ ]

r"([$@*[\]()&?]).*?(.)"

我认为这与 [ 和 ] 不是同一个字符有关,但我不确定出了什么问题。关于如何处理删除这些特殊字符 [ ] 之间的所有内容的任何想法?

https://regex101.com/r/pK9gX3/96

谢谢

【问题讨论】:

    标签: python regex


    【解决方案1】:

    如果您有多个周围的字符,例如{}, (), [] .. etc,请尝试以下代码:

    import re
    # list of surrounding characters to build a large regular expression 
    surrounding = [('\$', '\$'), ('\[', '\]'), ('{', '}')]
    text = """
    $remove$text
    [remove]text
    """
    
    RE_PATTERN = '|'.join(r'{0}[^{0}]*?{1}.*?'.format(*s) for s in surrounding)
    print(RE_PATTERN)  # \$[^\$]*?\$.*?|\[[^\[]*?\].*?|{[^{]*?}.*?
    print(re.sub(RE_PATTERN,'', text))
    # text
    # text
    

    【讨论】:

      【解决方案2】:

      您的正则表达式不起作用,因为在第二种情况下\1 试图匹配[。解决此问题的一种方法是分别调用每个选项:

      (\$[^$]*\$|\[[^]]*\])(.*)
      

      Demo on regex101

      请注意,这样做可以使第一组不捕获并将您的替换更改为\1

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-10-24
        • 1970-01-01
        • 2021-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多