我没有找到问题的答案所以我希望我们可以在这里解决它!假设我有这个字符串:
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])
根本不起作用!那么,你能帮助我只提取常量,即使它们位于字符串的末尾吗?解释你添加的新部件会有什么帮助:)
答案 0 :(得分:1)
你可以使用积极的先行断言。
[+-]?\s*\d+(?:\.\d+)?(?=[-+\s]|$)
[+-]?
会匹配可选的+
或-
符号。 \s*
匹配零个或多个空格。 \d+(?:\.\d+)?
将匹配整数和浮点数。 (?=[-+\s]|$)
肯定前瞻声称匹配必须后跟行锚的空格或-
或+
或$
结尾。
Java正则表达式,
"[+-]?\\s*\\d+(?:\\.\\d+)?(?=[-+\\s]|$)"
代码:
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])