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