【问题标题】:Python Regex that will work for any type of bracket适用于任何类型括号的 Python 正则表达式
【发布时间】:2017-03-23 16:00:54
【问题描述】:

有没有办法取正则表达式,比如

\(.*\)

并使其正确识别任何类型的括号对,例如

(\(|\{|\[).*(\)|\}|\])

不进行不正确的匹配,例如\(.*\]?

我专门使用 Python,但它在任何语言中都应该类似地工作。

【问题讨论】:

  • \(.*?\)|{.*?}|\[.*?] 之类的东西在大多数情况下应该足够了,无论有没有re.S 标志。
  • 你也需要注意嵌套括号吗?
  • @Sebastian Proske 理想情况下是的,我举了一个简单的例子来说明,但我希望将其用于一般应用

标签: python regex


【解决方案1】:

没有。常规语言无法正确处理嵌套。你需要一个合适的解析器。

【讨论】:

    【解决方案2】:
    ((?:\([^()]*\))|(?:\{[^{}]*\})|(?:\[[^[\]]*\]))
    

    更加笨拙,但与包含.* 的解决方案不同,这只会在嵌套括号的情况下捕获最里面的一对括号。在一对括号之间,所有内容都是允许的,甚至是换行符,除了括号本身[^{}]

    .* 是贪婪的,它会将两对括号作为一组,例如 (ab)cd(ef),甚至混乱地混合对并匹配 (ab)cd ) 例如。

    要捕获包含 outer 对括号的组,例如 (ab(cd)ef),我认为使用正则表达式是不可能的。

    【讨论】:

    【解决方案3】:

    没有什么神奇的方法可以告诉正则表达式将特定字符与其他字符匹配(如果它是完全相同的字符/字符串,您可以进行反向引用查看,但事实并非如此)。

    你可以做的是为此写一个“复杂”(不是那么多)表达式:

    ((?:\(.*\))|(?:\{.*\})|(?:\[.*\]))
    

    【讨论】:

    • 好吧,但很快就会变得非常笨拙
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    • 2011-07-18
    相关资源
    最近更新 更多