[英]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.