python - 用于从维基百科中的 ParserFunctions 生成值的 Python 工具/库
问题描述
给定一段Wikipedia ParserFunction文本,Python 中是否有任何工具或库可以从文本中生成计算值?例如
>>> parserfunc_2_value('{{#expr: 1/3 round 5 }}')
0.33333
解决方案
这是#expr
表达式的肮脏解决方案:我发现很多带有 '#expr' 的表达式与 library 共享相同的函数名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
推荐阅读
- ios - xib 内的视频视图未拉伸到控制器的宽度
- google-cloud-platform - GCP 上的 windows server 2019 和 windows server 2019 datacenter 有什么区别?
- ios - 为什么我的 CALayers 没有动画?取而代之的是,他们只是立即使用新值就位
- javascript - 使用 json 字符串显示 toast 消息时出现问题
- mysql-workbench - 如何在不重新启动 MySQL 的情况下刷新它?
- react-native - Axios:流的意外结束
- javascript - 如何使用jquery对行进行排序
- bash - 如何在 bash 脚本中编写多个 if 条件阶梯?
- c# - Notification.Extra.GetString 在包含数据时返回空
- jquery - Fullcalendar Jquery 插件显示“fullcalendar not a function”