[英]python re.match list of regular expressions
我有兩個列表: 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
中的正則表達式不匹配
這里有幾個問題:
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/']
請注意,我沒有“編譯”正則表達式,但是當測試許多域時,這樣做可能會提高速度。
您正在為忽略列表的每個正則表達式進行過濾,然后每次都重新分配finallist
列表。 因此,僅考慮最后一個正則表達式。
finallist = []
for url in urllist:
if any([re.search(r, url) for r in ignorelist]):
finallist.append(url)
或使用列表理解:
finallist = [url for url in urllist if not any(re.search(r, url) for r in ignorelist)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.