[英]Regex to extract mathematical variables in equation
我有一个作为String
给出的数学表达式,我必须提取所有标识为字母的变量,可能后跟一个数字(例如x
或x0
)。 它适用于简单的表达式,但如果我尝试使用更复杂的方程,我也会选择我不想要的数字,因为我的目标是确定两个方程是否使用相同的变量。
String expression = "((x0+(2.0^x))/(21.1-x0))";
for (String variable : expression.split("[^a-z0-9?]")) {
if(!variable.isEmpty()){
System.out.print(variable + " ");
};
output 是:
x0 2 0 x 21 1 x0
我想要的地方
x0 x x0
为什么它之前也需要没有字母的数字? 我已经尝试了\\b
的所有可能组合,但我没有在网上找到任何东西。
您也可以匹配您正在寻找的内容,而不是拆分您不想要的内容。
\b[a-z]\d*\b
String regex = "\\b[a-z]\\d*\\b";
String s = "((x0+(2.0^x))/(21.1-x0))";
List<String> matches = new ArrayList<String>();
Matcher m = Pattern.compile(regex, Pattern.CASE_INSENSITIVE).matcher(s);
while (m.find()) {
matches.add(m.group());
}
for (String match : matches) {
System.out.println(match);
}
Output
x0
x
x0
表达式保留数字,因为在创建String variable
时,它们不包含在split
方法的正则表达式搜索中。
尝试拆分一个或多个非字母数字字符 ( \W+
),其后可能跟零个或多个数字 ( \d*
)。
"\W+\d*"
将\d*
添加到现有正则表达式的末尾也应该有效。
"[^a-z0-9?]\d*"
使用 Java 8 在regex101上测试。
请让我知道这是否解决了您的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.