Skip to main content
 首页 » 编程设计

用于逻辑运算符的 Python 正则表达式

2024年08月25日25rubylouvre

我正在开发一个可以接受关系和逻辑运算符的规则系统。

规则系统中的一个简单表达式可以像

一样简单

EmployeeAgeProperty >= IntegerProperty:27

我在这里定义了用什么来代替 EmployeeHireDateProperty我的规则系统会对此进行评估。假设像上面这样的每个简单表达式的计算结果都是真/假。我的正则表达式是

(?P<lhs>[A-Z][a-zA-Z]*Property):{0,1}(?P<lhsPrimitiveValue>[A-Za-z0-9]*)\ *(?P<operator>[><=]|!=|<=|>=|in|not_in)\ *(?P<rhs>[A-Z][a-zA-Z]*Property):{0,1}(?P<rhsPrimitiveValue>[A-Za-z0-9]*)

lhs = 左侧
rhs = 右侧。

现在,我想通过逻辑运算符 And/Or(假设 Not 脱离上下文)将多个简单表达式组合成复合表达式。

所以,一个有效的复合表达式应该是

SimpleExpression1 and SimpleExpression2 or SimpleExpression3 其中每个简单表达式依次匹配上述正则表达式。

我希望我的正则表达式组返回 ('SimpleExpression1', 'and', SimpleExpression2', 'or', 'SimpleExpression3')

我可以想出这样的东西

([\w\d!=< ]*)\ *(and|or)\ *([\w\d!=< ]*)这会将单个复合表达式与一个和/或匹配。但无法进一步扩展。

请您参考如下方法:

也许你想尝试re.split,另见this question.

re.split('(and|or)', 'this and this or that') 
Out[18]: ['this ', 'and', ' this ', 'or', ' that']