我正在使用“高级搜索”功能,在需要加上括号的情况下,我需要评估的表达式看起来像这样:
((Loan number is 1000 And Lock Date is less than 12/03/2015) Or Borrower SSN contains 12345) And ((Buy date is between 12/01/2015 and 23/02/2016 And APR is less than 20000) Or Loan amount is greater than 60000)
或者用简单的话
((condition1 And condition2) Or condition 3) And ((condition4 And condition5) Or condition6).
如果我们看一下括号,则必须先对condition1和condition2求值,然后使用条件3执行其输出,依此类推…。
我们有API可以一次评估两个条件。然而,在这种情况下的挑战是
1)如何识别相应的括号并首先对其进行评估。然后将此中间结果用于进一步评估?
2)如何找到未使用的括号?例如((((condition1 And condition2))))在这种情况下尽管不是必须的,但有3个开始括号和3个结束括号是有效的表达式。
我试图在这里和这里找到一些算法
但是,这需要基于令牌的操作,该操作一次读取一个字符,这是计算机可以理解的算术表达式评估。就我而言,这些都是自定义的,我们应该找到一种算法来做到这一点。谁能为我的方案建议一个更好的方法?
如果我对您的理解正确,那么您已经有了表达式评估器。您需要的是根据括号拆分评估。我将使用一个循环,使用此正则表达式在其中找到内部括号组:
\(([^()]*)\)
然后,如果找到了它们,请用您的评估例程的结果替换它们,并重复直到最后一个字符串保留而没有括号。
伪代码:
Find a string enclosed by (), not containing any () If found Replace it with the evaluated value of the string (including parenthesis) Go again Return result
关于 未使用的 括号,将其视为相同。它们最终将作为单个值出现在您的评估例程中。
检查这个小提琴。而不是求值,它返回一个随机数0或1,但是它演示了逻辑。
0
1
希望这可以帮助。
问候。