我想出了一个将给定文本解析为 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/