【问题标题】:Split string by right closing parentheses [duplicate]用右括号分割字符串[重复]
【发布时间】:2021-06-26 08:46:54
【问题描述】:

我正在尝试根据括号拆分java中的字符串,可能存在嵌套括号,例如:

"{one two {three}}{one {two} {{three}}}"

我想要的是一个数组

array [0] = {one two {three}}

array [1] = {one {two} {{three}}}

我尝试使用 \ {(. *?) \} 正则表达式,但我得到了类似的子字符串

{one two {Three}

不考虑哪个是正确的右括号

我该怎么做?

【问题讨论】:

  • 是否有任意嵌套或者你知道最大深度吗? See demo for max 2 level deep
  • 对不起,我写错了,2组括号之间没有空格。不,不幸的是我不知道深度限制。
  • ideone.com/D5mj9i,不需要正则表达式。

标签: java regex split


【解决方案1】:

无法使用正则表达式(单独)执行此操作,因为您正在尝试识别非常规语法。只需遍历字符串,同时维护一个表示当前嵌套深度的计数器。每当您点击右括号并且深度下降为零时,输出自上次深度达到零以来的子字符串部分。

【讨论】:

    【解决方案2】:

    首先尝试在连续的左右括号之间引入一个新行 - 即 - }[ ]*{。 然后您可以在新行上拆分(如果需要或根据需要在替换之前可能需要删除现有的新行)。

    【讨论】:

    • 这不适用于嵌套大括号。考虑{{one}{two}}。而且不需要换行符。
    • 想法是回答具体的例子。但是即使在那里,{two} {{three}} 也会失败。所以无论如何它都不是可行的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-26
    • 1970-01-01
    • 2011-08-09
    相关资源
    最近更新 更多