gpt4 book ai didi

Java - 正则表达式为运算符拆分数学表达式,不包括括号内的运算符

转载 作者:行者123 更新时间:2023-11-30 06:49:20 24 4
gpt4 key购买 nike

我需要使用下面的正则表达式拆分下面的字符串。但它会拆分括号内的数据。

Input
T(i-1).XX_1 + XY_8 + T(i-1).YY_2 * ZY_14

Expected Output
T(i-1).XX_1 , XY_8 , T(i-1).YY_2 , ZY_14

它不应该拆分属于“(”和“)”的数据;

我尝试使用以下代码,但拆分了“(”和“)”下的数据

String[] result = expr.split("[+*/]");

任何修复此问题的指针。

我是这个正则表达式的新手。

Input
(T(i-1).XX_1 + XY_8) + T(i-1).YY_2 * (ZY_14 + ZY_14)
Output
T(i-1).XX_1 , XY_8 , T(i-1).YY_2 , ZY_14 , ZY_14

如果是T(i-1)需要忽略。

下面的表达式不起作用

XY_98 + XY_99 +XY_100
String lineExprVal = lineExpr.replaceAll("\\s+","");
String[] result = lineExprVal.split("[+*/-] (?!(^))");

最佳答案

您可以像这样拆分括号外的所有内容:

String str = "T(i-1).XX_1 + XY_8 + T(i-1).YY_2 * ZY_14";
String result[] = str.split("[+*/-] (?!(^))");
//---------------------------^----^^--List of your delimiters

System.out.println(Arrays.toString(result));

这将打印:

[T(i-1).XX_1 , XY_8 , T(i-1).YY_2 , ZY_14]

这个想法很简单,您必须使用不在括号内的定界符进行拆分。

您可以在这里查看ideone你可以在这里检查你的正则表达式 Regex demo


编辑

在第二种情况下,您必须使用此正则表达式:

String str = "(T(i - 1).XX_1 + XY_8)+  (i - 1).YY_2*(ZY_14 + ZY_14)";
String result[] = str.split("[+*+\\/-](?![^()]*(?:\\([^()]*\\))?\\))");

System.out.println(Arrays.toString(result));

这会给你:

[(T(i-1).XX_1+XY_8), T(i-1).YY_2, (ZY_14+ZY_14)]
^----Group1------^ ^--Groupe2-^ ^--Groupe3-^

您可以找到 Regex Demo ,我从这里的这篇文章中启发了这个解决方案 Regex to match only comma's but not inside multiple parentheses .

希望对您有所帮助。

关于Java - 正则表达式为运算符拆分数学表达式,不包括括号内的运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42920019/

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