python - 如何使用正则表达式处理嵌套括号?

标签 python regex

我想出了一个将给定文本解析为 3 类的正则表达式字符串:

  • 括号内
  • 括号内
  • 都没有。

像这样:

\[.+?\]|\(.+?\)|[\w+ ?]+

我的意图是只使用最外层的运算符。因此,给定 a(b[c]d)e,拆分将是:

a || (b[c]d) || e

如果括号内有括号,或括号内有括号,它工作正常,但当括号内有括号和括号内有括号时,它会崩溃。例如,a[b[c]d]e 拆分为

a || [b[c] || d || ] || e.

有什么方法可以单独使用正则表达式来处理这个问题,而不是使用代码来计算开/关括号的数量?谢谢!

最佳答案

标准1 正则表达式不够复杂,无法匹配这样的嵌套结构。解决这个问题的最佳方法可能是遍历字符串并跟踪左/右括号对。


1 我说的是标准,但并不是所有的正则表达式引擎都是标准的。例如,您可以通过使用递归正则表达式来使用 Perl 来做到这一点。例如:

$str = "[hello [world]] abc [123] [xyz jkl]";

my @matches = $str =~ /[^\[\]\s]+ | \[ (?: (?R) | [^\[\]]+ )+ \] /gx;

foreach (@matches) {
    print "$_\n";
}
[hello [world]]
abc
[123]
[xyz jkl]

编辑:我看到您正在使用 Python;查看pyparsing .

关于python - 如何使用正则表达式处理嵌套括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17384479/

相关文章:

Python duckduckgo 库未安装

python - Pygame 从位图中设置鼠标光标

javascript - 正则表达式 - 忽略引号/HTML(5) 属性过滤之间的文本

javascript - JS : Searching a list of objects inside another

python - 如何确保我的 Python 正则表达式输出字典?

c++ - 我怎样才能拥有在 Python C/C++ 扩展之间共享的全局 C/C++ 变量?

Python/MySQL - 将MySQL数据导出到excel

python - 最大化一系列值的组合

php - 以任意顺序匹配子模式

java - java中使用Pattern解析数据