正则表达式与不同字符串的多个匹配

时间:2012-05-14 16:20:47

标签: python regex

很难描述(特别是作为非母语人士),但我会尽我所能:

在我的python程序中,我有一个数据库,比方说,新闻文章和其中一个想要了解其中一部分的用户。 每个新闻对象都有多个字符串,如作者标题文本

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

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

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

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

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

[编辑:] 重新格式化伪代码,如RabbidRabbit建议。

1 个答案:

答案 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,那就足够了。

[编辑] 添加了示例