簡體   English   中英

python re.match正則表達式列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM