gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 10:05:43 26 4
gpt4 key购买 nike

我有一个字符串,我希望它是一个多项式表达式,例如 "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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com