我试图标记以下格式的字符串:

"98, BA71V-CP204L (p32, p30), BA71V-CP204L (p32, p30), , 0, 125900, 126505"
"91, BA71V-B175L, BA71V-B175L, , 0, 108467, 108994,   -, 528, 528"


每个令牌然后将存储在字符串数组中。字符串应以“,”标记,但不包括(,)内的字符串,以便(,)的内容属于标记。令牌也只能包含一个空格。

我认为正则表达式会找到一个逗号,然后检查它的左边是否用圆括号括起来,而右边是否用圆括号括起来。由于此逗号包含在some()中,因此不会用于标记。

我可以使用正则表达式来表示相反的内容,但是当分隔符的两边都不包含“(”或“)”时该怎么办?

目前正在使用:

StringTokenizer tokaniza = new StringTokenizer(content,","); //no regex


但是我觉得正则表达式与

content.split();

最佳答案

使用否定的超前断言。

String s = "98, BA71V-CP204L (p32, p30), BA71V-CP204L (p32, p30), , 0, 125900, 126505";
String parts[] = s.split(",(?![^()]*\\))");
System.out.println(Arrays.toString(parts));


输出:

[98,  BA71V-CP204L (p32, p30),  BA71V-CP204L (p32, p30),  ,  0,  125900,  126505]

09-11 23:23