多项式表达式的正则表达式
Regex for polynomial expression
我有一个字符串,我希望它是一个多项式表达式,类似于 "2x^2-3x+1
。我想使用正则表达式对表达式中的每个术语进行分组。我目前有 "^(-?\d?x(\^\d)?)+"
。我正在尝试捕获一个术语作为可选的减号,然后是一个数字,然后是 x,然后是一个可选的指数,它应该是“^someNumber”的形式。因此,对于我上面的多项式,我希望第 1 组为 "2x^2"
,第 2 组为 "-3x"
,第 3 组为 "+1"
。首先,如果我有 (someGroupExpression)+
,这会为出现的每个 someGroupExpression 生成一个组吗?其次,对于指数部分,我不想让它成为一个嵌套组,因为这会使遍历术语组很麻烦。如何指定指数部分应遵循的规则而不使其成为一个组?如果我能澄清这个问题,请告诉我。
要捕获未嵌套或重叠的组中的每个子表达式,请使用以下正则表达式。
正则表达式: ([+-]?[^-+]+)
解释:它会捕获whole的每一个子表达式而不重叠每个匹配。
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));
}
考虑所有子表达式的更健壮的正则表达式是:
正则表达式: ([+-]?(?:(?:\d+x\^\d+)|(?:\d+x)|(?:\d+)|(?:x)))
在Java中使用\
进行双重转义。 \d
会变成\d
,\^
会变成\^
。
我有一个字符串,我希望它是一个多项式表达式,类似于 "2x^2-3x+1
。我想使用正则表达式对表达式中的每个术语进行分组。我目前有 "^(-?\d?x(\^\d)?)+"
。我正在尝试捕获一个术语作为可选的减号,然后是一个数字,然后是 x,然后是一个可选的指数,它应该是“^someNumber”的形式。因此,对于我上面的多项式,我希望第 1 组为 "2x^2"
,第 2 组为 "-3x"
,第 3 组为 "+1"
。首先,如果我有 (someGroupExpression)+
,这会为出现的每个 someGroupExpression 生成一个组吗?其次,对于指数部分,我不想让它成为一个嵌套组,因为这会使遍历术语组很麻烦。如何指定指数部分应遵循的规则而不使其成为一个组?如果我能澄清这个问题,请告诉我。
要捕获未嵌套或重叠的组中的每个子表达式,请使用以下正则表达式。
正则表达式: ([+-]?[^-+]+)
解释:它会捕获whole的每一个子表达式而不重叠每个匹配。
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));
}
考虑所有子表达式的更健壮的正则表达式是:
正则表达式: ([+-]?(?:(?:\d+x\^\d+)|(?:\d+x)|(?:\d+)|(?:x)))
在Java中使用\
进行双重转义。 \d
会变成\d
,\^
会变成\^
。