繁体   English   中英

使用Java中的正则表达式从字符串中提取双精度或整数?

[英]extract a double or integer from a string using regular expression in java?

我想从字符串中提取方程常数(即整数或双NOT,后跟一个类似“ 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)

但这是行不通的,因为我已经做了一个月左右的时间,所以任何帮助将不胜感激。

关于什么

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

此变体使用所有格修饰符(“ ++”),对于无效数字可能不太严格,但是如果字符串在语法上是正确的,则没关系。

这应该工作:

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

[\\\\dx]之所以有效,是因为它消除了部分数字。 例如:对于30.14x,30.14不匹配(?!x)但匹配30.1。

这是通过两次传递来提取这些值的方法:

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}|$))";

正则表达式的问题在于您没有对^转义,因此它意味着字符串的开头。 而且,您也没有考虑到以数字或小数点开头的子字符串。 没有一个人继续前进。 因此,您的正则表达式的正确形式为:

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

可以的。 而且,如果您关心x上的指数,您可能想要这样做:

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

顺便说一下,你不需要逃避+[]并且-当它旁边的[]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM