Java RegEx:拆分而不丢失令牌

时间:2011-03-19 18:34:24

标签: java regex lookahead

我正在尝试编写正则表达式,当有空格后跟一个负号后跟非空格时会拆分字符串。

示例:

"x -y".split(regex)
returns: String[]{"x","-y"};

目前我正在使用

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

我的正则表达式;但这会返回“x”,“y”并吃掉负号。有没有办法不吃负号?

谢谢!

4 个答案:

答案 0 :(得分:3)

您可以在第二组中包含减号

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

这可以为您提供所需的结果。

答案 1 :(得分:2)

您正在捕捉用于拆分的减号。因此它被删除。

两种可能的解决方案:

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

如果拆分功能如此简单,请考虑使用字符串拆分功能。它比正则表达式快得多。

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

http://gskinner.com/RegExr/是一个检查正则表达式的好网站。如果你将你的正则表达式与Howards进行比较,你会看到差异。如果你拿我的并做一场比赛。

答案 2 :(得分:2)

模式:

\s(?=\-\S)

实施例“

 String:  x -y z -x y z
Matches:   ^    ^

Carets指向匹配

演示:

<强> Example Code

答案 3 :(得分:0)

如果要分割的值之间总是有空格,请考虑使用以下内容:

  

“x -y”.split(“ - ”);

请记住重新放入-(如果需要)。