在Python中进行有效的组子字符串搜索?

时间:2020-02-19 20:19:03

标签: python python-3.x search

让我们说我已经将文件中的一些信息加载到Python3字典中,结果看起来像这样。

Expected spy getProvider to have been called.

假设我要分析一堆(绝对吨)的弦。如果字符串包含给定键d = { 'hello' : ['hello', 'hi', 'greetings'], 'goodbye': ['bye', 'goodbye', 'adios'], 'lolwut': ['++$(@$(@%$(@#*', 'ASDF #!@# TOW'] } 的任何值,那么我想将其归类于该键中。

例如...

d

很明显,我可以像这样遍历键和值...

'My name is DDP, greetings' => 'hello'

但是我想知道对于这种大量搜索是否有更有效的算法;比我的天真循环更有效。有人知道这样的算法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用正则表达式来避免额外的操作。在这里,您所需要做的只是将单词与点字符连接起来,并将其传递给re.search()。由于顺序或确切的单词对您而言并不重要,因此您可以找出这些值与给定的字符串之间是否存在任何交集。

import re

def classify(s, d):
    for k, v in d.items():
        regex = re.compile(re.escape(r'|'.join(v)))
        if regex.search(s):
            return k

还请注意,您可以不用返回k yield来获取所有出现的迭代器,也可以使用字典来存储它们,等等。