将子字符串列表匹配到Python中的字符串列表

时间:2013-06-21 12:11:56

标签: python string-matching

将子字符串列表与字符串列表匹配的好pythonic方法是什么,如下所示:

if 'sub1' in str1 or 'sub2' in str1 or ... 'subN' in str1 or\
   'sub1' in str2 or 'sub2' in str2 or ... 'subN' in str2 or\
   ...
   'sub1' in strM or 'sub2' in strM or ... 'subN' in strM:

一种方法是将它们与列表理解结合起来,如下所示:

strList = [str1, str2, ..., strM]
subList = ['sub1', ..., 'subN']
if any(sub in str for sub in subList for str in strList):

是否有更好的东西,比如图书馆功能,可以吸收其中一个维度?

非常感谢。

2 个答案:

答案 0 :(得分:4)

您可以将子字符串编译为正则表达式,并使用它来搜索每个字符串。如果您没有那么多的子串,RE超出内部限制,这可能是最有效的方式。

pattern = "|".join(re.escape(s) for s in subList)
crexp = re.compile(pattern)
if any(crexp.search(s) for s in strList):
    ...

答案 1 :(得分:3)

this answer中所述,正则表达式将成为可行的方法,因为它们被建模为可以同时检查所有子字符串的DFA。您应该阅读该答案,因为它非常深入。