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: ^ ^