Java正则表达式中的数字后跟变量(字母)

时间:2015-01-22 01:19:31

标签: java regex

我没有找到问题的答案所以我希望我们可以在这里解决它!假设我有这个字符串:

String string = "1 + 1555.0056q + 34.0g - 451-0.7855";

我想定义一个可以找到所有常量而不是系数的正则表达式。所以我想找到1, - 451和-0.7855。到目前为止,我可以找到系数,但前提是它们不在字符串的末尾,因为我的正则表达式取决于它们后面没有字母,然后是空格或“ - ”或“+”。这是它的外观:

\\s*(\\-|\\+)\\s*\\d+\\.?\\d+[a-zA-Z]{0}(\\s|\\+|\\-)

我也尝试过:

\\s*(\\-|\\+)\\s*\\d+\\.?\\d+(!?[a-zA-Z])

根本不起作用!那么,你能帮助我只提取常量,即使它们位于字符串的末尾吗?解释你添加的新部件会有什么帮助:)

2 个答案:

答案 0 :(得分:1)

你可以使用积极的先行断言。

[+-]?\s*\d+(?:\.\d+)?(?=[-+\s]|$)

[+-]?会匹配可选的+-符号。 \s*匹配零个或多个空格。 \d+(?:\.\d+)?将匹配整数和浮点数。 (?=[-+\s]|$)肯定前瞻声称匹配必须后跟行锚的空格或-+$结尾。

Java正则表达式,

"[+-]?\\s*\\d+(?:\\.\\d+)?(?=[-+\\s]|$)"

DEMO

代码:

String str = "1 + 1555.0056q + 34.0g - 451-0.7855";
Matcher m = Pattern.compile("[+-]?\\s*\\d+(?:\\.\\d+)?(?=[-+\\s]|$)").matcher(str);
while(m.find())
{
    System.out.println(m.group());
}

输出:

1
- 451
-0.7855

答案 1 :(得分:-2)

这有效:(-\s?)?[\d.]+(?![.\w])