2

文字列から方程式の定数(つまり、整数または倍精度浮動小数点数の後に「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)

しかし、これはうまくいきません。私はこれを1か月ほど続けているので、どんな助けでも大歓迎です。

4

4 に答える 4

1

どうですか

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

?

このバリアントは所有量指定子 (「++」) を使用しており、無効な数値に対してはあまり厳密ではありませんが、文字列が構文的に正しい場合、これは問題ではありません。

于 2012-06-22T14:42:13.773 に答える
0

これは機能するはずです:

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

[\\d.x]部分的な数値を排除するために機能します。例:30.14xの場合、30.14は一致しません (?!x)が、30.1は一致します。

于 2012-06-22T12:47:54.660 に答える
0

正規表現の問題点は、エスケープしなかったことです^。したがって、文字列の先頭を意味します。また、数字または小数点が先行する部分文字列も考慮していませんでした。どちらも1つ進んだものではありません。したがって、正規表現の正しい形式は次のようになります。

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

これは正常に動作します。また、x の指数が気になる場合は、次のようにします。

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

+ちなみに、 の中[]でエスケープ- する必要はありませ[]

于 2012-06-22T14:00:47.417 に答える
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}|$))";
于 2012-06-22T13:32:05.480 に答える