我有一个字符串,我希望它是一个多项式表达式,例如 "2x^2-3x+1
。我想使用正则表达式对表达式中的每个项进行分组。我目前有"^(-?\d?x(\^\d)?)+"
。我试图将一个术语捕获为可选的减号,然后是数字,然后是 x,然后是可选指数,其形式应为“^someNumber”。因此,对于上面的多项式,我希望第 1 组为 "2x^2"
,第 2 组为 "- 3x"
,组 3 为 "+1"
。首先,如果我有 (someGroupExpression)+
,这会为出现的每个 someGroupExpression 生成一个组吗? 其次,对于指数部分,我不想让它成为一个嵌套组,因为这会使循环术语组变得很麻烦。如何指定指数部分应遵循的规则而不使其成为组?如果我能澄清这个问题,请告诉我。
最佳答案
要捕获组中未嵌套或重叠的每个子表达式,请使用以下正则表达式。
正则表达式: ([+-]?[^-+]+)
说明:它将捕获整体的每个子表达式,而不重叠每个匹配。
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
关于java - 多项式表达式的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36490757/