0

这很难描述(尤其是作为非母语人士),但我会尽力而为:

在我的 python 程序中,我有一个数据库,比如说,新闻文章和一个想要了解其中一个子集的用户。每个新闻对象都有多个字符串,例如AuthorTitleText

我想将用户的兴趣保存为一个表达式,它允许我匹配不同的字符串属性并将这些匹配与这样的逻辑运算符结合起来(语法并不重要):

attribute author matches pattern (\w*\sSmith) and attribute text doesn't
contain pattern (financ(e|ial))

然后,我必须为每个用户迭代所有文章,如果表达式有效,请通知他/她。

我的问题是我真的不知道该使用什么语言。我想避免创建自己的解析器并编写自己的解析器来解决所有常见的问题(安全性、转义等),因为我确信这是一个相当普遍的问题,并且必须有比我更好的解决方案能够创造。

我已经在网上搜索了一段时间,但没有找到任何东西。非常感谢您的每一次帮助;提前致谢!

[编辑:]按照 RabbidRabbit 的建议重新格式化伪代码。

4

1 回答 1

1

有几种方法可以解决这个问题。它们的范围从(attribute, regexp)您在每个对象基础上应用的元组列表到更复杂的事物。

一种选择是找到某种声明性“语言”,您可以使用它指定简单的查询,例如您提到的查询。这可以存储在 JSON 或 YAML 结构中,这完全取决于您希望它有多复杂/可扩展。

如果你想让它真正可扩展,你可能想要一个 DSL(特定领域的语言):

http://www.slideshare.net/Siddhi/creating-domain-specific-languages-in-python

这是过去的 StackOverflow 帖子,可能会有所帮助。

编写用于从表中选择行的领域特定语言

我能看到的最简单的解决方案(解析、生成和存储)是 LISP 样式的元组前缀列表,例如:

[('and', ('body', '.*to be or not.*'), ('author', (not, '.*shakespeare.*'))),
 ...]

如果您只需要基本的布尔运算符和正则表达式,那就足够了。

[编辑]添加示例

于 2012-05-14T16:34:29.427 回答