将数学表达式解析为“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)