思路:
1:利用栈结构,将 形如 ( A or B ) and C 转为后缀表达式(逆波兰式),也就是 A B or C and。
2:其实就可以把or 看成 加减号, and 看成乘除号,就类似于计算器的功能实现。
3:有了后缀表达式,依次处理,遇到or,and 依次处理前两个数值,就很方便了。
注:mongodb的表达式根据自己需要替换即可, 不过目前还没有解决not的情况,有待更新。
#encoding: UTF8
def mySplit(s,sep):
s1 = s.replace(sep,sep+sep)
lis = s1.split(sep)
while '' in lis:
lis[lis.index('')] = sep
return lis
def MidfixToPostfix(_midfixStr):
pOut = {
'#':0,
'(':7,
')':1,
'and':4,
'or':2
}
pIn = {
'#':0,
'(':1,
')':7,
'and':5,
'or':3
}
string = _midfixStr
inputList = string.split(' ')
inputLen = len(inputList)
tempList = list() #stack
tempList.append('#')