Java 分裂reg表达式

Java 分裂reg表达式,java,Java,我正在尝试拆分一个字符串,如下所示 String str="COMPLEX:[A(100),B(0)][80]:[B(100),A(0)][20]"; String [] tokens = str.split("[\\[\\]]"); 预期产出: COMPLEX: A(100),B(0) 80 B(100),A(0) 20 但是上面的分割函数中的reg epx为我提供了额外的新行输出,如 [0]->COMPLEX: [1]-> [2]->A(100),B(0) [3]-&g

我正在尝试拆分一个字符串,如下所示

String str="COMPLEX:[A(100),B(0)][80]:[B(100),A(0)][20]";
String [] tokens = str.split("[\\[\\]]");
预期产出:

COMPLEX:
A(100),B(0)
80
B(100),A(0)
20
但是上面的分割函数中的reg epx为我提供了额外的新行输出,如

[0]->COMPLEX:
[1]->
[2]->A(100),B(0)
[3]->
[4]->80 so on

如何消除多余的行?

您不应该在1上获得多余的换行符,但应该在3上获得多余的换行符,因为您的正则表达式同时匹配结束符]和开始符[,因此它在][]处拆分两次。 看看表达是否贪婪

这可能会通过在表达式中包含][来解决,可能是这样的:
“[\\[\]+”

+
放在那里会使表达式尽可能多地寻找相邻的括号。因此它只会在
][
处拆分一次,因为
][
与表达式匹配

如果你对理解正则表达式的贪婪和懒惰感兴趣

(编辑:)另外,80岁以后,你肯定也会得到
。如果你不想这样,请相应地调整你的正则表达式。(你确实想在复数后加冒号,所以你不能只在范围内加冒号)
类似这样的内容:
“[\\[\]]+:?[\\[\]*”

不客气!如果您希望以预期的输出结束,而不是在两者之间使用冒号,请阅读我的编辑。