Java正则表达式使用变量空格和分隔符拆分字符串

Java正则表达式使用变量空格和分隔符拆分字符串,java,string,split,pattern-matching,Java,String,Split,Pattern Matching,给定一行字符串,如 a b c d => e f g 1 2 使用双分隔符(空格和=>)模式 “+(++\\=>*)?” 生成以下9个字段作为Java中String.split()的输出: a、b、c、d、e、f、g、1、2 但是,如果输入字符串使用类似“1m”的符号表示数字“一百万”,即 abcd=>efg1M2 毫不奇怪,该模式生成10个字段(m是额外的字段) 是否可以修改模式以可靠地将1和m分组为1 m,其他所有内容都相同,在String.split()中?这将根据=>或后

给定一行字符串,如

a   b c d => e f g   1 2
使用双分隔符(
空格
=>
)模式

“+(++\\=>*)?”

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

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

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

abcd=>efg1M2

毫不奇怪,该模式生成10个字段(
m
是额外的字段)


是否可以修改模式以可靠地将
1
m
分组为
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));
String s=“a b c d=>e f g 1 m 2”;

String[]parts=s.split(“\\s*=>\\s*|”(?这会根据
=>
或后面不跟
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));
String s=“a b c d=>e f g 1 m 2”;

String[]parts=s.split(“\\s*=>\\s*|”(?在前面没有数字或后面没有“m”的空格上拆分):

str.split((?*)?”

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

对前面没有数字或后面没有“m”的空格进行拆分:

str.split((?*)?”

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

“如果要匹配后面没有其他内容的内容,则必须进行负前瞻。”“如果要匹配后面没有其他内容的内容,则必须进行负前瞻。”您建议的原始正则表达式,
\s+(?!m)
,留下了空的标记,因此我通过在
=>
分隔符周围添加
\s*
符号来更正它,但同时您也修复了它。很好!:-)是的,我后来才意识到。所以我在
\\s
之后添加了
*
,这意味着零个或更多的空格字符。您建议的原始正则表达式,
\s+(?!m)
,留下了空的标记,所以我通过在
=
分隔符周围添加
符号来更正它,但同时您也修复了它。很好!:-)是的,我后来才意识到。所以我在
\\s
之后添加了
*
,这意味着零个或更多的空格字符。是的,我最初有第一个带有非贪婪量词的“+”组,即“+?”。你的建议似乎也很有效,所以谢谢你和+1.:-)是的,我最初有第一个带非贪婪量词的“+”组,即“+?”。您的建议似乎也有效,所以谢谢您,还有+1.:-)