我想使用字符串中存在的算术和逻辑运算符来拆分字符串。 示例字符串如下所示,a,b,c是常量值,其值必须从数据库中获取并计算表达式并返回True或False
例如:
'a >= 10 AND b >=20 OR c<=100'
或
'a >=10 OR b < 100 AND c = 100'
我需要根据OR,AND,NOT或任何逻辑运算符将其拆分为
a >= 10
b >= 20
c <= 100
并使用运算符(AND,OR)计算条件
例: a = 10,b = 25,c = 50
我需要评估10 >= 10 AND 25 >=20 OR 50 <=100
并返回True
在python中有没有简单的方法呢?
答案 0 :(得分:3)
您可以使用eval()
执行字符串语句。例如,
eval('a >= 10 and b >=20 or c<=100')
它将评估为True id a,b和c已经定义。
注意:使用的逻辑运算符应为小写,如and
而不是AND
答案 1 :(得分:1)
这是使用sympy
和一些正则表达式的变体。
这将执行以下操作:
a>=10
AND
和OR
替换为&
和|
sympify
字符串以获得有效的同情表达以下是代码:
from re import sub
from sympy import symbols, sympify
a, b, c = symbols('a b c')
strg = 'a >= 10 AND b >=20 OR c<=100'
def repl(match):
'''
surround match with quotes
'''
return '({})'.format(match.group())
strg1 = sub('([abc]\s*[<>=]+\s*\d*)', repl, strg)
print(strg1) # (a >= 10) AND (b >=20) OR (c<=100)
strg2 = strg1.replace('AND', '&').replace('OR', '|')
print(strg2) # (a >= 10) & (b >=20) | (c<=100)
sympy_expr = sympify(strg2)
print(sympy_expr) # Or(And(a >= 10, b >= 20), c <= 100)
subs = {a: 10, b: 25, c: 50}
res = sympy_expr.subs(subs)
print(res) # True