regex用于划分数学函数

bjg7j2ky  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(462)

我正在编写一个求导计算器,我需要将给定的字符串输出分成一个字符串数组,但是我当前的spliting命令不能很好地处理负数,我需要它不能将负号拆分为*、/、^、(、sin(、cos(、tan((我仍然没有在代码中实现sin、cos和tan),但我会的,所以我想知道如何不把负号分开。
代码:

  1. public class Graph {
  2. private String function;
  3. private final String ONLY_POSITIVE_DELIMITER = "(?<=[+-/*^()])|(?=[+-/*^()])";
  4. public Graph(String function) {
  5. this.function = function;
  6. }
  7. public String getDerivative() {
  8. return null;
  9. }
  10. private List<String> getArguments() {
  11. String[] split = function.split(ONLY_POSITIVE_DELIMITER);
  12. List<String> args = new ArrayList<>(Arrays.asList(split));
  13. System.out.println("Splitten der Funktion: "+args);
  14. return args;
  15. }
  16. }

这将把1-(-2*-1)-3变成 [1, -, (, -, 2, *, -, 1, ), -, 3] ,但我希望它变成: [1, -, (, -2, *, -1, ), -, 3]

zzoitvuj

zzoitvuj1#

使用现有的模式,可以去掉 - 并添加一个额外的替代项来Assert - 在左边,后面没有一个 *,/,^,(,sin(,cos(,tan( ```
(?<=[+/*^()])|(?=[+/*^()-])|(?<=-(?<!(?:[*/^(]|(?:sin|cos|tan)()-))

  1. 正则表达式演示| java演示

String ONLY_POSITIVE_DELIMITER = "(?<=[+/*^()])|(?=[+/*^()-])|(?<=-(?<!(?:[*/^(]|(?:sin|cos|tan)\()-))";
String function = "1-(-2*-1)-3";
String[] split = function.split(ONLY_POSITIVE_DELIMITER);

List args = new ArrayList<>(Arrays.asList(split));
System.out.println("Splitten der Funktion: "+args);

  1. 输出

Splitten der Funktion: [1, -, (, -2, *, -1, ), -, 3]

展开查看全部

相关问题