拆分reg表达式

时间:2017-07-24 15:17:14

标签: 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]->
[4]->80 so on

如何消除多余的线?

1 个答案:

答案 0 :(得分:1)

你不应该在1上获得额外的换行符,但是你应该得到3中的那个,因为你的正则表达式与结束符号和开头符号匹配[,所以它在[]处分裂两次。 看看表达式是否贪婪。

这可能会通过以下方式解决:[在你的表达中,也许是这样的:      "[\\[\\]]+"

拥有+将使表达式尽可能多地查找彼此相邻的括号。因此,它只会在][分割一次,因为][与表达式匹配。

Read this如果你有兴趣了解正则表达式的贪婪和懒惰。

(编辑:)此外,80后你肯定会得到:。如果您不想这样,请相应地调整您的正则表达式。 (您确实需要在COMPLEX之后使用冒号,因此您不能只在该范围内添加冒号) 这样的事情:"[\\[\\]]+:?[\\[\\]]*"