给出一段Wikipedia ParserFunction文本,Python中是否有任何工具或库可以从文本生成计算值?例如
>>> parserfunc_2_value('{{#expr: 1/3 round 5 }}')
0.33333
[这是#expr
表达式的肮脏解决方案:我发现许多带有'#expr'的表达式与库math
共享相同的函数名。然后,我使用eval
通过以下函数获取值:
import wikitextparser as wtp
import math
import re
def parserfunc_2_value(val='{{#expr: 1/3 round 5 }}'):
eq = wtp.parse(val).parser_functions[0].arguments[0].value
filter_pattern = [['([\d\*\/\+\-\s]*)?(round|div|mod)([\d\*\/\+\-\s]*)',r'\2(\1,\3)'],
['(trunc|abs|exp|ln|sin|cos|tan|acos|asin|atan)([\d\*\/\+\-\s]*)',r'\1(\2)'],
['ln\(([\d\*\/\+\-\s]*)\)',r'log(\1)']]
for ptn,rep in filter_pattern:
eq = re.sub(ptn,rep,eq)
return eval(eq)
parserfunc_2_value()
此功能似乎能够处理#expr
的大多数简单模式,下面是一些示例:
>>> parserfunc_2_value('{{#expr: 1/3 round 5 }}')
0.33333
>>> parserfunc_2_value('{{#expr: 1+4 }}')
5