网站模板怎么修改,成都网站优化seo,哈尔滨优化网站方法,品牌全案设计公司rule-engine是一种轻量级、可选类型的表达式语言#xff0c;具有用于匹配任意 Python 对象的自定义语法#xff0c;使用python语言开发。
规则引擎表达式用自己的语言编写#xff0c;在 Python 中定义为字符串。其语法与 Python 最相似#xff0c;但也受到 Ruby 的一些启发…rule-engine是一种轻量级、可选类型的表达式语言具有用于匹配任意 Python 对象的自定义语法使用python语言开发。
规则引擎表达式用自己的语言编写在 Python 中定义为字符串。其语法与 Python 最相似但也受到 Ruby 的一些启发。这种语言的一些特性包括
可选类型提示用正则表达式匹配字符串日期时间数据类型复合数据类型相当于 Python 字典、列表和集合类型数据属性线程安全
参考文档可在 https://zeroSteiner.github.io/rule-engine/ 获取。
规则语法
创建规则的语法基于计算为 True匹配或 False不匹配的逻辑表达式。规则支持一小组数据类型这些数据类型可以定义为文字或使用应用规则的 Python 对象进行解析。有关受支持类型的完整列表请参阅数据类型表。
并非所有受支持的操作都适用于下表所示的所有数据类型。规则遵循标准的操作顺序。
语法
表达式语法支持多种操作包括数值数据的基本算术和字符串的正则表达式。操作是类型感知的并且在使用不兼容的类型时会引发异常。
支持的操作
下表概述了可在规则引擎表达式中使用的所有运算符。
算术运算符 比较运算符 算术比较运算符 逻辑运算符 按位运算支持浮点值但如果该值不是自然数则会引发EvaluationError。 算术比较运算符支持多种数据类型但左值的数据类型必须与右值的数据类型相同。例如一个 STRING 可以与另一个 STRING 进行比较但不能与 FLOAT 进行比较。该技术与 Python 使用的基于字典顺序的序列比较技术相同。 使用正则表达式操作时左侧的表达式是要比较的字符串右侧的表达式是用于匹配或搜索操作的正则表达式。
关于时间 DATETIME 值
DATETIME 文字必须以 ISO-8601 格式指定。底层解析逻辑由 dateutil.parser.isoparse() 提供。未指定时间的 DATETIME 值例如 d2019-09-23将计算为指定日期的午夜整点的 DATETIME。
显示等效文字表达式的示例规则
d2019-09-23 d2019-09-23 00:00:00 日期默认为午夜除非指定时间
安装
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple rule-engine
示例代码
示例1官方示例
import rule_engine
# match a literal first name and applying a regex to the email
rule rule_engine.Rule(first_name Luke and email ~ .*rebels.org$
) # Rule textfirst_name Luke and email ~ .*rebels.org$
rule.matches({first_name: Luke, last_name: Skywalker, email: lukerebels.org
}) # True
rule.matches({first_name: Darth, last_name: Vader, email: dvaderempire.net
}) # False示例2自定义 rule rule_engine.Rule(num 20000 and num30000
)
rule.matches({num: 2500
}) # Truerule rule_engine.Rule((num 2000 and num3000) or typecars
)
rule.matches({num: 1500,type:bus
}) # False示例3过滤
改造此方法可以实现示例2中按条件获取得分值。
import datetimecomics [{title: Batman,publisher: DC,issue: 89,released: datetime.date(2020, 4, 28)},{title: Flash,publisher: DC,issue: 753,released: datetime.date(2020, 5, 5)},{title: Captain Marvel,publisher: Marvel,issue: 18,released: datetime.date(2020, 5, 6)}
]
rule rule_engine.Rule(# match books published by DCpublisher DC
)
for v in rule.filter(comics):print(v)print(v[title]){title: Batman, publisher: DC, issue: 89, released: datetime.date(2020, 4, 28)}Batman{title: Flash, publisher: DC, issue: 753, released: datetime.date(2020, 5, 5)}Flash示例4另外一种方案
conditon[[num 30000,40],[num 20000 and num30000,30],[num 10000 and num20000,20],[num 10000,10]]num 13003
for v in conditon:rulerule_engine.Rule(v[0])if rule.matches({num:num}):print(v[1])break总结
rule-engine做为一种轻量级规则引擎在数据分析中做为条件规则使用基本够用了。
参考
Considerations for building a rules engine in Python. 2021.09 https://zerosteiner.github.io/rule-engine/index.html