我有两个列表:ignorelist
是一个正则表达式列表,另一个列表叫urllist
。我试图这样做,如果urllist
中的索引项与ignorelist
中的正则表达式匹配,则不会将其添加到finallist
ignorelist = ['(?:\.)amazon\.com(?:\/(?:.*))',
'(?:\.)google\.com(?:\/(?:.*))']
urllist = ['api.amazon.com/', 'fakedomain.com/']
finallist = []
for r in ignorelist:
r = re.compile(r)
finallist = [x for x in urllist if not r.match(x)]
输出
['api.amazon.com/', 'fakedomain.com/']
我试图使输出基本上为['fakedomain.com/']
,因为它与ignorelist
中的正则表达式不匹配
答案 0 :(得分:2)
这里有几个问题:
re.match
在该行的开头搜索。您的表达式不是为此而构建的。使用re.search
。我愿意:
import re
ignorelist = ['(?:\.)amazon\.com(?:\/(?:.*))',
'(?:\.)google\.com(?:\/(?:.*))']
urllist = ['api.amazon.com/', 'fakedomain.com/']
finallist = [x for x in urllist if not any(re.search(r,x) for r in ignorelist)]
因此finallist
仅包含与ignorelist
结果:
['fakedomain.com/']
请注意,我没有“编译”正则表达式,但在测试很多域时,您可能会获得一些速度。
答案 1 :(得分:1)
您正在过滤忽略列表的每个正则表达式,然后每次重新分配var folder;
var nodes = search.luceneSearch("PATH:\"/app:company_home/app:dictionary/cm:StarXpert_x0020_Workflow\"");
folder = nodes[0];
。因此,只考虑最后一个正则表达式。
finallist
或使用列表理解:
finallist = []
for url in urllist:
if any([re.search(r, url) for r in ignorelist]):
finallist.append(url)