繁体   English   中英

正则表达式提取方程中的数学变量

[英]Regex to extract mathematical variables in equation

我有一个作为String给出的数学表达式,我必须提取所有标识为字母的变量,可能后跟一个数字(例如xx0 )。 它适用于简单的表达式,但如果我尝试使用更复杂的方程,我也会选择我不想要的数字,因为我的目标是确定两个方程是否使用相同的变量。

     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

正则表达式演示| Java演示

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM