在Python中,我应该使用什么样的解析器来根据布尔条件匹配文本

在Python中,我应该使用什么样的解析器来根据布尔条件匹配文本,python,parsing,yacc,Python,Parsing,Yacc,比如说,我有一篇课文 John likes apple, banana and grapes 我有一个布尔表达式,类似于 ((banana & apple) & (!orange)) || (peach) 这基本上意味着文本应该((包含“香蕉”和“苹果”两个词)和(不应该包含“橙色”)或(包含“桃子”一词) 将上述布尔逻辑应用于文本,我们需要将结果设置为True(因为它确实包含香蕉和苹果,并且不包含单词orange) 在Python中实现此类布尔规则的简单方法是什么?是否有一

比如说,我有一篇课文

John likes apple, banana and grapes
我有一个布尔表达式,类似于

((banana & apple) & (!orange)) || (peach)
这基本上意味着文本应该((包含“香蕉”和“苹果”两个词)和(不应该包含“橙色”)或(包含“桃子”一词)

将上述布尔逻辑应用于文本,我们需要将结果设置为True(因为它确实包含香蕉和苹果,并且不包含单词orange)

在Python中实现此类布尔规则的简单方法是什么?是否有一个框架可以获取文本块和表达式并对其求值?如果需要,可以以满足框架要求的方式编写表达式

到目前为止,我正在使用一个简单的代码解析Python文本,该代码将跟踪偏执等内容,但效率不高,也无法提供探索更灵活表达式的机会


谢谢

我不知道您是否想通过提供要解析的文本来完成此操作,但我有以下想法:

class String(str):
    def __call__(self, *args):
        s = str(self)
        for arg in args:
            if arg not in s:
                return False
        return True


if __name__ == '__main__':
    s1 = String("John likes apple, banana and grapes")
    print(s1("apple", "banana") and not s1("orange"))  # True

我会使用正则表达式。@RyanSchaefer正则表达式在这里并不完全是正确的工具,尽管我相信你可以让它工作….@AdamSmith我不知道是否有更快的方法,但对我来说,这听起来像是一个问题,可以用几个正则表达式和正则逻辑来解决。我通过对表达式的基本解析来使用正则表达式,但这并没有t为您提供了添加更复杂表达式的灵活性,而代码实际上是不可维护的。您还需要或吗?谢谢,这是一个好的开始,但我希望在外部文件中指定表达式并使其完全灵活。顺便说一句,我偶然发现了这个问题,因为您提供了一个答案,该答案显示了正确的方向,即使规则必须硬编码,我会接受的。