使用java中的正则表达式从字符串中提取double或integer?

时间:2012-06-22 12:37:33

标签: java regex

我想从一个字符串中提取一个方程常数(即整数或双重后跟一个像“x”之类的字母)。 例如eqn = "30.14x^2 + 55.69x + 60.1 = 100"。 到目前为止,我可以使用

获得x的系数
([\\+\\-])?(\\d+(\\.\\d+)?)x

在这种情况下给出55.69x or 30.14x

现在我想获得常量,我在下面尝试使用正则表达式提取+60.1或100

(?<!^)([\\+\\-])?(\\d+(\\.\\d+)?)(?!x)

然而,这不起作用。任何帮助都会受到高度赞赏,因为我已经有一个月左右了。

4 个答案:

答案 0 :(得分:1)

怎么样

 (?<!\^)(-|\+)?[\d.]++(?!x)

此变体使用所有格量词(“++”),对无效数字可能不那么严格,但如果字符串在语法上是正确的,则无关紧要。

答案 1 :(得分:0)

这应该有效:

([\\+\\-])?(\\d+(\\.\\d+)?)(?![\\d.x])

[\\d.x]有效,因为它消除了部分数字。例如:对于30.14x,30.14与(?!x)不匹配,但30.1将匹配。

答案 2 :(得分:0)

这是一种在几次传递中提取这些值的方法:

public static void main(String[] args) {

    String eqn = "30.14x^2 + 55.69x + 60.1 = 100";

    String numberRegex = "[\\d]+(?:[\\.]{1}[\\d]+)?";
    String symbolsRegex = "=+-/\\\\*\\^";

    String coefRegex = "("+numberRegex+")([a-z]{1})";
    Pattern p = Pattern.compile(coefRegex);
    Matcher m = p.matcher(eqn);
    while (m.find()) {
        System.out.println("coefficient: " + m.group(1) + " -- " + m.group(2));
    }

    String constRegexp = "([^ " + symbolsRegex + "]" + numberRegex + "(?:[ ]{1}|$))";
    p = Pattern.compile(constRegexp);
    m = p.matcher(eqn);
    while (m.find()) {
        System.out.println("constant: " + m.group(1));
    }

}

输出:

coefficient: 30.14 -- x
coefficient: 55.69 -- x
constant: 60.1 
constant: 100

只是添加我上面使用的正则表达式的文字值:

String coefRegex = "([\\d]+(?:[\\.]{1}[\\d]+)?)([a-z]{1})";
String constRegexp = "([^ =+-/\\\\*\\^][\\d]+(?:[\\.]{1}[\\d]+)?(?:[ ]{1}|$))";

答案 3 :(得分:0)

你的正则表达式有什么问题,你没有逃脱^,因此它意味着字符串的开头。而且你还没有考虑前面有数字或小数点的子串。对于那些由一个进行的那些都没有。因此,正则表达式的正确形式将是:

(?<!(\\^|\\d|\\.))[+-]?(\\d+(\\.\\d+)?)(?!(x|\\d|\\.))

哪作得好。如果你关心x上的指数,你可能想要这样:

([+-])?(\\d+(\\.\\d+)?)x(^(\d+))?

顺便说一下,+[]- [ ]旁边的{{1}}。{ / p>