首页 > 解决方案 > 什么 RegEx 分隔多项式的项

问题描述

我有一个字符串5x^3-2x^2+5x 我想要一个将这个字符串拆分为 5x^3, -2x^2, 5x的正则表达式

我试过"(-)|(\\+)"了,但这没有用。因为它没有考虑负功率条款。

标签: javaregex

解决方案


您可以使用此正则表达式拆分字符串,

\+|(?=-)

其工作方式是,它拆分字符串消费+字符,但如果有,-则使用拆分-但不消费-,因为这是前瞻。

看看这个Java代码,

String s = "5x^3-2x^2+5x";
System.out.println(Arrays.toString(s.split("\\+|(?=-)")));

在下面给出您的预期输出,

[5x^3, -2x^2, 5x]

编辑:

虽然在他的帖子中的一个 OP 评论中他说,不会有负面权力,但万一你也有负面权力,你可以使用这个处理负面权力的正则表达式,

\+|(?<!\^)(?=-)

检查这个更新的 Java 代码,

List<String> list = Arrays.asList("5x^3-2x^2+5x", "5x^3-2x^-2+5x");
for (String s : list) {
    System.out.println(s + " --> " +Arrays.toString(s.split("\\+|(?<!\\^)(?=-)")));
}

新输出,

5x^3-2x^2+5x --> [5x^3, -2x^2, 5x]
5x^3-2x^-2+5x --> [5x^3, -2x^-2, 5x]

推荐阅读