Java正则表达式,单独的学位和多项式的系数

时间:2015-03-04 16:38:43

标签: java regex

我无法理解正则表达式语法的工作原理。我尝试用它从String中读取多项式的系数和度数。我看到了类似的问题,但对我来说还不够清楚。找到了如何提取系数,但当我尝试做同样的程度时,我发现它击败了我。 对于如下输入:2x ^ 3 + 3x ^ 2

        //for coeff
        String[] coef = str.split("x\\^\\d+\\+?");
        for (String part : coef)
        {
            System.out.println(part);
         }

        //for degree
        String[] degree = str.split("+\\+?\\d");
        for (String part : degree)
        {
            System.out.println(part);
         }

已经咨询this

4 个答案:

答案 0 :(得分:4)

我建议使用匹配单个正则表达式而不是使用2个不同的正则表达式并进行2次拆分操作:

Pattern p = Pattern.compile( "(-?\\b\\d+)[xX]\\^(-?\\d+\\b)" );

然后,您可以使用Matcher.find()获取coef(匹配的组1)和学位(匹配的组2)。

RegEx Demo


<强>代码:

String input = "2x^3-3x^-2";
Pattern p = Pattern.compile( "(-?\\b\\d+)[xX]\\^(-?\\d+\\b)" );
Matcher m = p.matcher( input );
while (m.find()) {
    System.out.println("Coef: " + m.group(1));
    System.out.println("Degree: " + m.group(2));
}

答案 1 :(得分:2)

String monomPattern = "((-?\\d+(?=x))?(-?[xX])(\\^(-?\\d+))?)|((-?)[xX])|(-?\\d+)";

如果您没有任何空格,这应该有用。如果你有,简单地说 为字符串调用replaceAll(“\ s +”,“”)方法。 (此方法不会更改原始字符串,因此您必须将其分配给自身)

e.g. textField = textField.replaceAll("\\s+","");

IMS

答案 2 :(得分:1)

根据以下正则表达式分割您的输入以获取学位值。

String s[] = str.split("\\+?\\d+x\\^");

DEMO

答案 3 :(得分:0)

试试这个REGEX:

getData() {
  this.dataService.getData()
    .subscribe(data => {
      this.results = data;
      for (let x of this.results) {
        var link = x.info.link;
        this.dataService.getDataQuery(link)
                        .subscribe(data => {
                           // Assumes the data returned by getDataQuery function is an array
                           // If it is wrapped in a json object, just retrieve it
                           // like x.info.link = data.fieldName; for example
                           x.info.link = data;
                        });
      }
    });
}

您可以在此处运用正则表达式:REGEXR