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

Min*_*yan 5 python regex

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

  • 在括号内
  • 括号内的
  • 都不是.

像这样:

\[.+?\]|\(.+?\)|[\w+ ?]+
Run Code Online (Sandbox Code Playgroud)

我的目的是仅使用最外层的运算符.所以,给定a(b[c]d)e,分裂将是:

a || (b[c]d) || e
Run Code Online (Sandbox Code Playgroud)

它在括号内的括号或括号内的括号中工作正常,但在括号内的括号和括号内的括号时会分解.例如,a[b[c]d]e被拆分为

a || [b[c] || d || ] || e.
Run Code Online (Sandbox Code Playgroud)

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

ars*_*jii 10

标准1正则表达式不够复杂,无法匹配那样的嵌套结构.接近这个的最佳方法可能是遍历字符串并跟踪开/关括号对.


1我说标准,但并非所有正则表达式引擎都是标准的.例如,您可以通过使用递归正则表达式来使用Perl.例如:

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

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

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

编辑:我看到你正在使用Python; 退房pyparsing.