我想出了一个正则表达式字符串,它将给定的文本解析为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.
| 归档时间: |
|
| 查看次数: |
899 次 |
| 最近记录: |