我正在开发一个可以接受关系运算符和逻辑运算符的规则系统。在
规则系统中的一个简单表达式可以简单到
EmployeeAgeProperty >= IntegerProperty:27
在这里,我定义了替代EmployeeHireDateProperty
的内容,我的规则系统将对其进行评估。假设上面的每个简单表达式的计算结果都是true/false。我的正则表达式应该是
(?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]*)
左侧=左侧
rhs=右侧。在
现在,我想通过逻辑运算符和/或(假设Not与上下文无关)将多个简单表达式组合成复合表达式。在
所以,一个有效的复合表达式应该是
SimpleExpression1 and SimpleExpression2 or SimpleExpression3
其中每个简单的表达式inturn将匹配上述regex。在
我希望我的regex组返回('SimpleExpression1', 'and', SimpleExpression2', 'or', 'SimpleExpression3')
我可以想出这样的办法
([\w\d!=< ]*)\ *(and|or)\ *([\w\d!=< ]*)
,它将与一个和/或匹配单个复合表达式。但无法进一步扩展。在
也许你想试试
re.split
,另请参见this question.相关问题 更多 >
编程相关推荐