Java regex用可变空格和分隔符拆分字符串

时间:2015-03-04 03:47:29

标签: java string split pattern-matching

给出一个像

这样的单行字符串
a   b c d => e f g   1 2

使用双分隔符(space=>)模式

" +( +|\\=> *)?"

String.split()中生成以下9个字段作为Java的输出:

a, b, c, d, e, f, g, 1, 2

但是,如果输入字符串使用“1M”之类的符号表示数字“1百万”,即

a b c d => e f g 1 m 2

毫不奇怪,这种模式会产生10个字段(m是额外的字段)。

可以修改模式,使1m可以1 m String.split()中的{{1}}可靠地组合在一起,其他一切都是相同的吗?

2 个答案:

答案 0 :(得分:2)

根据=>m之后的空格分割输入。

String s = "a b c d => e f g 1 m 2";
String[] parts = s.split("\\s*=>\\s*|\\s+(?!m)");
System.out.println(Arrays.toString(parts));

输出:

[a, b, c, d, e, f, g, 1 m, 2]

String s = "a b c d => e f g 1 m 2";
String[] parts = s.split("\\s*=>\\s*|(?<!\\d)\\s+(?!m)");
System.out.println(Arrays.toString(parts));

答案 1 :(得分:2)

拆分不以数字开头或后跟“m”的空格:

str.split("((?<!\\d) | (?!m))+(\\=> *)?"

FYI“+”作为可选组中的替换是多余的,因为初始“+”将消耗所有空格。