Java - 通过正则表达式标记

Java - Tokenizing by regex

我正在尝试标记以下格式的字符串:

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

然后每个标记都将存储在一个字符串数组中。字符串将由“,”标记化,不包括 ( , ) 内的字符串,以便 ( , ) 的内容属于标记。令牌也可能只包含 space.

我认为正则表达式会找到一个逗号,然后检查它是否在左侧被左括号包围,在右侧被右括号包围。由于此逗号包含在某些 ( ) 中,因此不会用于标记化。

我可以有一个相反的正则表达式,但是如果分隔符的两边都不包含“(”或“)”呢?

目前正在使用:

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

但我觉得

的正则表达式更好
content.split();

尝试拆分使用:

(?<!\(\w{1,4}),(?!\s*\w*\)).*?

唯一的一点是,Java 不支持后视中的无限重复,您必须指定括号内的字符数(即 \w{1,4})。换句话说,如果括号内的字符超过 4 个,这将中断。

使用否定的先行断言。

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]