很难描述(特别是作为非母语人士),但我会尽我所能:
在我的python程序中,我有一个数据库,比方说,新闻文章和其中一个想要了解其中一部分的用户。 每个新闻对象都有多个字符串,如作者,标题或文本。
我想将用户的兴趣保存为一个表达式,它允许我匹配不同的字符串属性,并将这些匹配与逻辑运算符组合在一起(语法并不重要):
attribute author matches pattern (\w*\sSmith) and attribute text doesn't
contain pattern (financ(e|ial))
然后,我必须为每个用户迭代所有文章,如果表达式有效,请通知他/她。
我的问题是我真的不知道使用什么语言。我想避免创建我自己的解决方案并编写我自己的解决方案,包括所有常见问题(安全性,转义等),因为我确信这是一个相当常见的问题,并且必须有一个比我更好的解决方案。能够创造。
我已经在网上搜索了一段时间,但还没找到任何东西。非常感谢每一位帮助;提前谢谢!
[编辑:] 重新格式化伪代码,如RabbidRabbit建议。
答案 0 :(得分:1)
有几种方法可以解决这个问题。它们的范围从您按每个对象应用的(attribute, regexp)
元组列表到更复杂的事物。
一种选择是找到某种声明性的“语言”,您可以使用它来指定简单查询,例如您提到的那种。这可能是存储在JSON或YAML结构中的东西,它取决于您希望它的复杂性/可扩展性。
如果您希望它真正可扩展,您可能希望拥有DSL(特定于域的语言):
http://www.slideshare.net/Siddhi/creating-domain-specific-languages-in-python
以下是过去的StackOverflow帖子,可能会有所帮助。
Writing a Domain Specific Language for selecting rows from a table
我能看到的最简单的解决方案(解析,生成和存储)是一个LISP样式的元组前缀列表,例如:
[('and', ('body', '.*to be or not.*'), ('author', (not, '.*shakespeare.*'))),
...]
如果您只需要基本的布尔运算符和RegExs,那就足够了。
[编辑] 添加了示例