从查询字符串中识别数学公式

时间:2021-07-14 04:53:00

标签: java regex

从昨天开始我就一直在思考这个问题,希望得到一些指点。我将收到 Where Query Statements 作为输入,

(((REVENUE_M2-REVENUE_M1)/REVENUE_M1)*100 >= 10 AND ((REVENUE_M2-REVENUE_M1)/REVENUE_M1)*100 < 50) OR CLASS_DENOM = 2001

我正在标记如下所示的语句,

[(((REVENUE_M2-REVENUE_M1)/REVENUE_M1)*100, >, =, 10, AND, ((REVENUE_M2-REVENUE_M1)/REVENUE_M1)*100, <, 50), OR, CLASS_DENOM, ==, 2001]

这是我使用的正则表达式 - ([^\"]\S*|\".+?\")\s* - 它将识别以除 " \S* 以外的其他内容开头的标记,后跟零个或多个非空格字符。

但现在从第一个标记开始,我试图确定公式 ((REVENUE_M2-REVENUE_M1)/REVENUE_M1)*100 而不包括用于优先级的 (,这就是我陷入困境的地方。这是我的代码,

List tokenizer(String str){
    List<String> tokens = new ArrayList<>();
    Matcher m = Pattern.compile("([^\"]\\S*|\".+?\")\\s*").matcher(str);
    while (m.find())
        tokens.add(m.group(1));
    return tokens;
}
    
void parser(String str) {
    for(String token : tokenizer(str)) {
        if(token.matches("regex to identify mathematical formula"))
            //parse the formula
    }
}

所以我的问题是我应该如何构建正则表达式,以便它仅识别 ((REVENUE_M2-REVENUE_M1)/REVENUE_M1)*100 而不包括用于优先级的 (

0 个答案:

没有答案
相关问题