多项式表达式的正则表达式

时间:2016-04-08 02:55:41

标签: java regex polynomials

我有一个字符串,我希望是一个多项式表达式,如"2x^2-3x+1。我想使用正则表达式对表达式中的每个术语进行分组。我目前有"^(-?\d?x(\^\d)?)+"。我试图将一个术语捕获为可选的减号,然后是一个数字,然后是x,然后是一个可选的指数,它应该是" ^ someNumber"的形式。因此,对于我的上述多项式,我希望组1为"2x^2",组2为"-3x",组3为"+1"。首先,如果我有(someGroupExpression)+,这会为每个发生的someGroupExpression生成一个组吗?其次,对于指数部分,我不想让它成为嵌套组,因为这会使遍历术语组变得麻烦。如何指定指数部分应遵循的规则而不将其作为一个组?如果我能澄清这个问题,请告诉我。

1 个答案:

答案 0 :(得分:1)

要捕获未嵌套或重叠的组中的每个子表达式,请使用以下正则表达式。

正则表达式: ([+-]?[^-+]+)

说明:它将捕获整个的每个子表达式,而不会重叠每个匹配。

Java代码

String exp = "2x^3+4x^2+5x-42";
Pattern pattern = Pattern.compile("([+-]?[^-+]+)");
Matcher matcher = pattern.matcher(exp);
int x=0;
while (matcher.find()) {
    x=x+1;
    System.out.println("Group "+x+": " + matcher.group(1));
}

<强> Regex101 demo

<强> Ideone Demo

考虑所有子表达式的更强大的正则表达式将是:

正则表达式: ([+-]?(?:(?:\d+x\^\d+)|(?:\d+x)|(?:\d+)|(?:x)))

在Java中使用\\进行双重转义。 \d将变为\\d\^变为\\^

<强> Regex101 Demo

<强> Ideone Demo