Java 正则表达式以可变空格和定界符拆分字符串

Java regex to split string with variable spaces and delimiter

给定一个单行字符串,例如

a   b c d => e f g   1 2

带有双分隔符(space=>)的模式

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

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

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

但是,如果输入字符串使用像“1 M”这样的符号来表示数字“100万”,即

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

这个模式毫不奇怪地产生了 10 个字段(m 是额外的一个)。

是否可以修改模式以可靠地将 1m 分组为 1 m,其他一切都相同,在 String.split() 中?

这会根据 => 或后面没有 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));

拆分前面没有数字或后面没有 "m" 的空格:

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

仅供参考,“+”作为可选组中的替代项是多余的,因为初始“+”会占用所有空格。