检查另一个string是否存在多个string

如何检查数组中的任何string是否存在于另一个string中?

喜欢:

a = ['a', 'b', 'c'] str = "a123" if a in str: print "some of the strings found in str" else: print "no strings found in str" 

该代码不起作用,只是为了显示我想实现的目标。

你可以使用any

 if any(x in str for x in a): 

类似于检查是否find了列表中的所有string,请使用all而不是anystring。

如果astra str变长,则应该小心。 直接的解决scheme是O(S *(A ^ 2)),其中Sstr的长度,A是a中所有string的长度之和。 为了更快的解决scheme,请查看Aho-Corasickalgorithm进行string匹配,该algorithm以线性时间O(S + A)运行。

如果所有你想要的都是True或者False ,那么any()是最好的方法,但是如果你想特别知道哪个string/string匹配,你可以使用一些东西。

如果你想要第一个匹配(用False作为默认值):

 match = next((x for x in a if x in str), False) 

如果你想获得所有的匹配(包括重复):

 matches = [x for x in a if x in str] 

如果你想得到所有不重复的匹配(不pipe顺序):

 matches = {x for x in a if x in str} 

如果您想以正确的顺序获取所有不重复的匹配项:

 matches = [] for x in a: if x in str and x not in matches: matches.append(x) 

只是为了增加一些与regex多样性:

 import re if any(re.findall(r'a|b|c', str, re.IGNORECASE)): print 'possible matches thanks to regex' else: print 'no matches' 

或者如果你的列表太长 – any(re.findall(r'|'.join(a), str, re.IGNORECASE))

你需要迭代一个元素。

 a = ['a', 'b', 'c'] str = "a123" found_a_string = False for item in a: if item in str: found_a_string = True if found_a_string: print "found a match" else: print "no match found" 
 a = ['a', 'b', 'c'] str = "a123" a_match = [True for match in a if match in str] if True in a_match: print "some of the strings found in str" else: print "no strings found in str" 

这取决于上下文假设,如果你想检查单个文字就像(任何单个单词a,e,w,..等)是足够的

 original_word ="hackerearcth" for 'h' in original_word: print("YES") 

如果你想检查original_word中的任何字符:利用

 if any(your_required in yourinput for your_required in original_word ): 

如果你想在original_word中input所有你想要的东西,那就尽量使用简单的

 original_word = ['h', 'a', 'c', 'k', 'e', 'r', 'e', 'a', 'r', 't', 'h'] yourinput = str(input()).lower() if all(requested_word in yourinput for requested_word in original_word): print("yes") 

jbernadas已经提到了Aho-Corasickalgorithm以减less复杂性。

以下是在Python中使用它的一种方法:

  1. 从这里下载aho_corasick.py

  2. 把它放在和你的主Python文件相同的目录下,并命名为aho_corasick.py

  3. 用下面的代码尝试alrorithm:

     from aho_corasick import aho_corasick #(string, keywords) print(aho_corasick(string, ["keyword1", "keyword2"])) 

请注意,search区分大小写