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]
我正在尝试标记以下格式的字符串:
"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]