【问题标题】:Python regex for logical operators用于逻辑运算符的 Python 正则表达式
【发布时间】:2015-06-11 03:35:48
【问题描述】:

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

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

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!=< ]*) 将匹配单个复合表达式与一个和/或。但无法进一步扩展。

【问题讨论】:

    标签: python regex


    【解决方案1】:

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

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

    【讨论】:

    • 哈哈,这实际上可以解决我的问题 :-) 是否有可用的正则表达式解决方案?主要是我有兴趣看看我错过了什么。
    • 嗯不确定,老实说我不太喜欢复杂的正则表达式,我发现它们很难阅读和维护,我更喜欢具有可读步骤的更简单的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2023-01-23
    • 2016-08-27
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    相关资源
    最近更新 更多