加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 02:30:16 所属栏目:百科 来源:网络整理
导读:我想出了一个正则表达式字符串,它将给定的文本解析为3个类别: 在括号中 括号内 既不是. 像这样: [.+?]|(.+?)|[w+ ?]+ 我的目的是仅使用最外层的运算符.所以,给定a(b [c] d)e,分裂将是: a || (b[c]d) || e 它在括号内的括号或括号内的括号中工作正常,
我想出了一个正则表达式字符串,它将给定的文本解析为3个类别:

>在括号中
>括号内
>既不是.

像这样:

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

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

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

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

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

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

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

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读