如何在python中优化在一个字符串(“haystack”)中搜索多个字符串(“needle”)

时间:2016-08-06 11:45:46

标签: python search optimization

我需要知道是否在大海捞针中找到了/所有针头。我假设有一种方法可以优化搜索时间。例如:

haystack = "xxxxxefgyyy"
needles = [ 'ezz', 'efg', 'eee', 'b', ... ]

在此示例中,优化的方法可能会按首字母对针进行排序。在干草堆中匹配“ezz”之后,重新搜索干草堆是没有意义的。理想情况下,针对下一针(“egh”),将从'e'的最后位置搜索干草堆,而不是从头开始搜索('xxx ..')。

这种算法的名称是什么?

有什么python实现?

注释:

  • 我当前的程序在未知文本中搜索数千个已知针头。
  • 在这种情况下,我只需要检查是否存在(真/假)
  • 在这种情况下,我搜索是否存在任何针(“或”搜索)。假设无论如何都需要搜索大多数针(@marko)。

1 个答案:

答案 0 :(得分:-1)

也许有更高效的实现,但你可以简单地使用re。对于一个非常大的needles,这可能并不理想 - 不知道“真正大”的起点。

import re

haystack = "xxxxxefgyyy"
needles = [ 'ezz', 'efg', 'eee', 'b']

needles_re=re.compile("|".join(map(re.escape,needles)))

for m in needles_re.finditer(haystack):
    print(m.group(0))