Java - 通过正则表达式进行标记

标签 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"

每个标记将被存储在一个字符串数组中。字符串将用“,”标记,排除 ( , ) 内的字符串,以便 ( , ) 的内容属于标记。标记也可能只包含一个空格。

我认为正则表达式会找到一个逗号,然后检查它的左侧是否由左括号包围,右侧是否由右括号包围。由于该逗号包含在 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]

关于Java - 通过正则表达式进行标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28510307/

相关文章:

java - JGroups、Terracotta 和 Hazelcast

regex - Rails验证RGB十六进制

java - 在Java中遍历字符串字符的最简单/最好/最正确的方法是什么?

java - 字符串分词器,分隔符

python - 在 Python 中从另一个列表中排除一个列表中的项目的有效方法

java - TestNG 测试继承和组

java - 如何使用EclipseLink为公共(public)接口(interface)下的独立实体声明接口(interface)描述符?

java - 在每个 JTextArea 中显示迭代

javascript - 从数组中删除换行符/空格

regex - 必须通过正则表达式提取去除最后一次出现的符号 ^ 字符来提取单词的开头以结束