簡體   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