检查字符串列表A中的任何项是否是字符串列表B中项的子字符串

时间:2016-11-08 21:34:46

标签: python string list

我试图通过一组匹配器和一组字符串进行排序,如果我有

matchers = ['foo', 'bar', 'abc']

strings = ['afooa', 'zbarz', 'abcabc', 'purple', 'foobar']

我希望能够获得strings的任何元素,其中matchers的任何元素都是子字符串,这样

results = ['afooa', 'zbarz', 'abcabc', 'foobar'],理想情况下不仅仅依靠嵌套的for循环。

我已经浏览了一段时间,但这是一个难以理解的问题,所以即使任何人对搜索方面的任何建议都会非常感激。

2 个答案:

答案 0 :(得分:6)

results = [s for s in strings if any(m in s for m in matchers)]

说明:我们遍历strings并添加元素,如果matchers中的任何元素都包含strings元素。

答案 1 :(得分:3)

如果您不想编码循环,可以使用regular expression(RegEx):

>>> import re

>>> regex = re.compile('|'.join(matchers))

这会创建一个与RegEx foo|bar|abc匹配的任何内容。

我们可以使用正则表达式的search方法和filter

>>> list(filter(pattern.search, strings))
['afooa', 'zbarz', 'abcabc', 'foobar']
如果没有匹配,

search会返回MatchObjectNone。所以我们过滤掉匹配某些内容的字符串(并不重要匹配的内容。)

如果我们使用match,它将从字符串的开头匹配:

>>> list(filter(pattern.match, strings))
['abcabc', 'foobar']