Java正则表达式:拆分而不丢失令牌

Java正则表达式:拆分而不丢失令牌,java,regex,lookahead,Java,Regex,Lookahead,我试图编写一个正则表达式,当有一个空格后跟一个负号后跟一个非空格时,它将拆分一个字符串 例如: "x -y".split(regex) returns: String[]{"x","-y"}; 目前我正在使用 (?<=\\s)-(?=\\S+) (?您正在捕获用于拆分的减号。因此它将被删除 两种可能的解决办法: a) 将它添加到第二个匹配中,因为它必须在那里,否则分割将不会返回此结果 b) 请尝试(\S*)(\S*),然后进行匹配。这将返回两个结果,“x”和“-y” 如果拆分函数是这样

我试图编写一个正则表达式,当有一个空格后跟一个负号后跟一个非空格时,它将拆分一个字符串

例如:

"x -y".split(regex)
returns: String[]{"x","-y"};
目前我正在使用

(?<=\\s)-(?=\\S+)

(?您正在捕获用于拆分的减号。因此它将被删除

两种可能的解决办法:

a) 将它添加到第二个匹配中,因为它必须在那里,否则分割将不会返回此结果 b) 请尝试
(\S*)(\S*)
,然后进行匹配。这将返回两个结果,“x”和“-y”

如果拆分函数是这样的简单函数,则考虑使用字符串拆分函数。它比正则表达式快得多

var result = "x -y".split(" -");
if (result.length == 2) result[1] = "-" + result[1];

是一个检查正则表达式的好网站。如果你将你的正则表达式与霍华德进行比较,你会发现两者的不同。如果你拿走我的,也做一个匹配。

如果你要分割的值之间总是有一个空间,考虑使用类似的:

“x-y”。拆分(“-”)


只要记住把
-
放回(如果需要的话)。

你可以把减号放在第二组中

\\s(?=-\\S+)
这将为您提供所需的结果。

模式:

\s(?=\-\S)
“例子”

插入符号指向匹配项

演示:


只有在有负号的情况下才应该拆分。但是您可以按
'-'
拆分。谢谢,我将您的建议纳入了我的答案中。
\s(?=-\s)
也许?查找空格,但确保有负号后跟非空格字符。()
 String:  x -y z -x y z
Matches:   ^    ^