删除所有嵌套块,同时通过python单独保留非嵌套块

tor*_*ger 3 python regex recursion nested brackets

资源:

[This] is some text with [some [blocks that are nested [in a [variety] of ways]]]
Run Code Online (Sandbox Code Playgroud)

结果文字:

[This] is some text with
Run Code Online (Sandbox Code Playgroud)

我不认为你可以为此做一个正则表达式,从查看堆栈溢出线程.

有没有一种简单的方法可以做到这一点 - >或者必须达到pyparsing(或其他解析库)?

Joh*_*lla 5

这是一种不需要任何依赖关系的简单方法:扫描文本并为你传递的大括号保留一个计数器.每次看到"["时递增计数器; 每次看到"]"时减少它.

  • 只要计数器为零或一,将您看到的文本放在输出字符串上.
  • 否则,您处于嵌套块中,因此请勿将文本放在输出字符串中.
  • 如果计数器没有在零结束,则字符串格式不正确; 你有不等数量的开合括号.(如果它大于零,你有那么多的[s;如果它小于零你就会有那么多的]s.)

  • 但在他的例子中,`[some`将使用你的方法放在输出字符串中.您必须保存出现在"级别1"的文本,并且只有在此块中没有更高级别的情况下才将其放入输出字符串中. (4认同)