python中的另一个停用词列表(子串)

时间:2012-04-24 09:37:32

标签: python

我正在寻找通过另一个停止列表过滤一个列表的漂亮pythonic方法,但我想首先匹配第二个列表中的子串。

具体来说:我有list1的URL和list2,如:

['microsoft.com', 'ibm.com', 'cnn', '.ru'] etc

第一个URL列表很大(数千个项目),第二个列表较小,如500-1000。但是使用“in”或sets的简单匹配是不够的,因为第二个列表项应该用作子字符串搜索。 我只能想到两个“for”循环,但它们似乎不是pythonic:)

PS目的是从第一个列表中删除匹配的项目。

2 个答案:

答案 0 :(得分:3)

您可以从要匹配的字符串构建单个析取正则表达式,然后使用RE对象的search方法进行匹配。在将它们粘贴到RE中之前,请确保re.escape字符串。

>>> import re
>>> substrings = ['microsoft.com', 'ibm.com', 'cnn', '.ru']
>>> pattern = "(?:%s)" % "|".join(map(re.escape, substrings))
>>> print(pattern)
(?:microsoft\.com|ibm\.com|cnn|\.ru)
>>> pattern = re.compile(pattern)
>>> [x for x in ["www.microsoft.com", "example.com", "foo.ru"]
...    if not pattern.search(x)]
['example.com']

答案 1 :(得分:0)

这是你所期望的吗?

one=['microsoft.com', 'ibm.com', 'cnn', '.ru']
two=['.com']
filtered=[o for o in one for t in two if o.find(t)!=-1]