如何在Python中匹配搜索字符串与内容

1 投票
6 回答
1529 浏览
提问于 2025-04-15 12:47

通常情况下,当我们进行搜索时,我们会有一个故事列表,输入一个搜索字符串,然后期待返回一个结果列表,这些结果中的故事与输入的搜索字符串匹配。

而我想做的正好相反。我想给出一组搜索字符串和一个故事,然后找出哪些搜索字符串与这个故事匹配。

这可以用正则表达式来实现,但我想使用更复杂的搜索查询,这些查询是由solr支持的。关于查询语法的详细信息可以在这里找到。注意:我不会使用加权。

基本上,我想要一些关于下面示例代码中doesitmatch函数的指引。

def doesitmatch(contents, searchstring):
    """
    returns result of searching contents for searchstring (True or False)
    """
    ???????
    ???????


story = "big chunk of story 200 to 1000 words long"
searchstrings = ['sajal' , 'sajal AND "is a jerk"' , 'sajal kayan' , 'sajal AND (kayan OR bangkok OR Thailand OR ( webmaster AND python))' , 'bangkok']

matches = [[searchstr] for searchstr in searchstrings if doesitmatch(story, searchstr) ]

编辑:另外,我也想知道是否有任何模块可以将下面的lucene查询转换为正则表达式:

sajal AND (kayan OR bangkok OR Thailand OR ( webmaster AND python) OR "is a jerk")

6 个回答

0

可能速度慢,但方法简单:

你可以把故事和每个字符串一起发给搜索引擎查询。如果有返回结果,那就说明匹配上了。

如果没有返回结果,那你就需要自己实现搜索的语法。如果要用到像“标题:”这样的东西,那就会比较复杂。如果只是用你例子里的AND和OR,那就可以写一个递归函数,难度不大。

0

前一段时间,我在找用Python实现的Lucene搜索引擎,结果发现了Woosh。这个是完全用Python写的文本搜索引擎,可能能满足你的需求。

你也可以试试pyLucene,不过我没有深入研究过这个。

2

经过大量的搜索,我意识到我想做的其实是布尔搜索。

我找到了可以让正则表达式支持布尔搜索的代码:http://code.activestate.com/recipes/252526/

现在这个问题看起来解决了。

撰写回答