用正则表达式进行Java标记化

用正则表达式进行Java标记化,java,regex,tokenize,stringtokenizer,Java,Regex,Tokenize,Stringtokenizer,我正在尝试标记以下格式的字符串: "98, BA71V-CP204L (p32, p30), BA71V-CP204L (p32, p30), , 0, 125900, 126505" "91, BA71V-B175L, BA71V-B175L, , 0, 108467, 108994, -, 528, 528" 然后,每个令牌将存储在字符串数组中。字符串将通过“,”进行标记,排除(,)内的字符串,以便(,)的内容属于标记。令牌也可能只包含一个空格 我想reg-ex会找到一个逗号,然后检查

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

"98, BA71V-CP204L (p32, p30), BA71V-CP204L (p32, p30), , 0, 125900, 126505"
"91, BA71V-B175L, BA71V-B175L, , 0, 108467, 108994,   -, 528, 528"
然后,每个令牌将存储在字符串数组中。字符串将通过“,”进行标记,排除(,)内的字符串,以便(,)的内容属于标记。令牌也可能只包含一个空格

我想reg-ex会找到一个逗号,然后检查它的左边是否有一个左括号,右边是否有一个右括号。因为这个逗号包含在some()中,所以它不会用于标记化

我可以用一个正则表达式来表示相反的结果,但是分隔符两边都不包含“(”或“)”的时间呢

目前我正在使用:

StringTokenizer tokaniza = new StringTokenizer(content,","); //no regex
但我觉得正则表达式和

content.split();
尝试使用以下方法进行拆分:

(?<!\(\w{1,4}),(?!\s*\w*\)).*?
(?
唯一的一点是,Java不支持在look behinds中无限重复。您必须指定括号内的字符数(即.\w{1,4})。换句话说,如果括号内的字符数超过4,这将中断。

尝试使用以下方法拆分:

(?<!\(\w{1,4}),(?!\s*\w*\)).*?
(?
唯一的一点是,Java不支持在look behinds中无限重复。您必须指定括号内的字符数(即.\w{1,4})。换句话说,如果括号内的字符数超过4,这将中断。

尝试使用以下方法拆分:

(?<!\(\w{1,4}),(?!\s*\w*\)).*?
(?
唯一的一点是,Java不支持在look behinds中无限重复。您必须指定括号内的字符数(即.\w{1,4})。换句话说,如果括号内的字符数超过4,这将中断。

尝试使用以下方法拆分:

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

唯一的一点是,Java不支持在look behinds中无限重复。您必须指定括号内的字符数(即.\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]

使用否定的前瞻断言

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]

使用否定的前瞻断言

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]

使用否定的前瞻断言

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]

您知道令牌中可接受的整个字符范围是什么吗?大写?小写?标点符号?可能是任何真正与大小写有关的字符。只有符号是“+”或“-”它本身介于两个分隔符之间,如上面的第二行。您知道令牌中可接受的整个字符范围是什么吗?大写?小写?标点符号?可能是任何与大小写/字符有关的东西。只有符号是“+”或“-”它本身介于两个分隔符之间,如上面的第二行。您知道令牌中可接受的整个字符范围是什么吗?大写?小写?标点符号?可能是任何与大小写/字符有关的东西。只有符号是“+”或“-”它本身在两个分隔符之间,如上面的第二行。您知道令牌中可接受的字符的整个范围是什么吗?大写?小写?标点符号?可能是与大小写/字符有关的任何东西。只有符号是“+”或“-”,它本身在两个分隔符之间,如上面的第二行。