Python 将数学表达式解析为;3+;2*临时和#x2B;湿度;,其中,替换有效载荷中的alpha值
数学表达式可以是任何东西。表达式中的变量或字母字符也不是固定的“3+2*温度+湿度”。变量必须查找json,并由json中的值替换Python 将数学表达式解析为;3+;2*临时和#x2B;湿度;,其中,替换有效载荷中的alpha值,python,pyparsing,Python,Pyparsing,数学表达式可以是任何东西。表达式中的变量或字母字符也不是固定的“3+2*温度+湿度”。变量必须查找json,并由json中的值替换 environment = {"temp": 23, "humidity": 12, "airpressure":21.12} expression = '3 + 2 * temp + humidity' 我看到的回应是'3+2*23+12. 由于我刚刚开始探索pyparsing,我找不到解决方案。您可以
environment = {"temp": 23, "humidity": 12, "airpressure":21.12}
expression = '3 + 2 * temp + humidity'
我看到的回应是'3+2*23+12.
由于我刚刚开始探索
pyparsing
,我找不到解决方案。您可以使用正则表达式查找变量,然后使用re.sub
将每个匹配的变量替换为其值:
import re
environment = {"temp": 23, "humidity": 12, "airpressure":21.12}
expression = '3 + 2 * temp + humidity'
def replace_var(m):
return str(environment[m.group(0)])
def replace_vars(expression):
return re.sub(r'[a-z]+', replace_var, expression) # assuming your variables are all lowercase
print(replace_vars(expression))
# 3 + 2 * 23 + 12
如果
环境
中不存在变量,这将引发键错误
,您可以将环境
字典的键转换为正则表达式,然后用相应的值替换它们:
def resolve_vars(expression, environment):
regex = r"\b({})\b".format("|".join([re.escape(k) for k in environment]))
repl = lambda s: str(environment.get(s.group(), s.group()))
return re.sub(regex, repl, expression)
我不会投赞成票,也不会投反对票,但社区成员肯定会要求您展示您迄今为止所做的尝试。您是否只想用数字
23
和12
替换字符串'temp'
和'湿度'
,或者您还想将结果字符串'3+2*23+12'
作为算术表达式进行求值以得到数字61?顺便说一句,您可能想看看这个类似(但更复杂)的问题: