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

标签 java regex polynomials

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

相关文章:

java - 文件处理的资源泄漏,try with resources VS try-catch-finally with file.close()

java - SQL 选择未提交导致缓存

regex -\+ 在 os x 上的 sed 中没有按预期工作

java - 读取文本文件并将它们转换为多项式

c++ - (有效地)动态存储多项式

java - Spring JDBC 依赖问题

java - 在 Java Arraylist 中存储用户输入

iPhone:UITextField 中的正则表达式和文本输入验证失败

regex - 删除所有数字和所有点的正则表达式

java - FFT 除法 复数,Java