解析字符串表达式

时间:2015-02-13 15:16:03

标签: python regex parsing expression eval

我需要解析包含表达式的字符串。该语言是专有的,我不确定我是否知道完整的语法,但基本上一个示例表达式如下所示:

"some_name+(some_other_name * 4 * different_name)+ 'h40028"

我已经将各种名称说明为some_name等,我需要将其替换为我存储的字典中的整数等价物。根据引用的变量或数量的多少,对表达式的长度没有约束。

然后我需要评估结果表达式。语法允许空格和基本数学运算符:+-*(可能/

我几乎不知道lexxers和解析器,因此我正在寻找最简单的方法。

谢谢!

2 个答案:

答案 0 :(得分:1)

根据您的字典替换:

my_dict = {'Mark': 2, 'Susan': 1, 'Billy': 3}
strings = 'Mark + (Susan * 4 * Billy)'

for k, v in my_dict.items():
    strings = strings.replace(k, str(v))

print eval(strings)

答案 1 :(得分:0)

要解析一个等式,你可以使用compiler模块,(为了获得使用eval的风险!!!):

>>> import compiler
>>> eq="some_name+(some_other_name * 4 * different_name)+ h40028"
>>> ast= compiler.parse( eq )
>>> ast
Module(None, Stmt([Discard(Add((Add((Name('some_name'), Mul((Mul((Name('some_other_name'), Const(4))), Name('different_name'))))), Name('h40028'))))]))
相关问题