将数学表达式解析为“3 + 2 * temp + humidity”,其中替换有效负载中的 alpha 值
Parse Math Expression as "3 + 2 * temp + humidity", where replace alpha values from payload
数学表达式可以是任何东西。表达式中的变量或字母字符也不是固定的“3 + 2 * temp + humidity”。该变量必须查找 json 并替换为 json.
中的值
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
如果 environment
中不存在变量,这将引发 KeyError
。
您可以将 environment
字典的键值转换为正则表达式,然后用相应的值替换它们:
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)
数学表达式可以是任何东西。表达式中的变量或字母字符也不是固定的“3 + 2 * temp + humidity”。该变量必须查找 json 并替换为 json.
中的值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
如果 environment
中不存在变量,这将引发 KeyError
。
您可以将 environment
字典的键值转换为正则表达式,然后用相应的值替换它们:
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)