簡體   English   中英

Python正則表達式-排除包含單詞的網址

[英]Python Regex - exclude url containing a word

我對正則表達式有疑問-我有4個網址示例:

http://auto.com/index.php/car-news/12158-classicauto-cup-2016-photo 
http://auto.com/index.php/car-news/11654-battle-royale-2014
http://auto.com/index.php/tv-special-news/10480-new-film-4
http://auto.com/index.php/first/12234-new-volvo-xc60

我想排除里面帶有“ tv-special-news”或最后是“ photo”的網址。

我試過了:

http://(www.)?auto.com/index.php/(?!(tv-special-news)).*/[a-zA-Z0-9\-]{1,}-(?!photo)

但是它不能完全按照我的要求工作

http://(www.)?auto.com/index.php/(?!(tv-special-news)).*/[a-zA-Z0-9\-]{1,}-(?!photo)

您對此很滿意。 您只需要刪除(?!photo)之前的破折號,即可使行結束時沒有結尾的破折號,並在末尾添加$以確保需要匹配整行。

然后,您還必須將負前瞻更改為負后瞻,以確保如果在行末跟有photo(?<!photo)話,則與行尾不匹配。

http://(www.)?auto.com/index.php/(?!(tv-special-news)).*/[a-zA-Z0-9\-]{1,}(?<!photo)$

另外,您應該正確地避開所有點:

http://(www\.)?auto\.com/index\.php/(?!(tv-special-news)).*/[a-zA-Z0-9\-]+(?<!photo)$

同樣,量詞{1,}等效於+

您可以使用此正則表達式:

^(?!.*-photo$)http://(?:www\.)?auto\.com/index\.php/(?!tv-special-news)[^/]+/[\w-]+-

正則演示1

  • 如果URL以photo結尾,則(?!.*-photo$)會否定匹配失敗。
  • (?!tv-special-news)/index.php/后出現tv-special-news時會否定斷言失敗。
  • 更好地在正則表達式中使用開始錨

或者使用后置正則表達式,您可以使用:

^http://(www\.)?auto\.com/index\.php/(?!tv-special-news).*/[a-zA-Z0-9-]+$(?<!photo)

RegEx演示2

您可以使用以下解決方案:

import re

list_of_urls = ["http://auto.com/index.php/car-news/12158-classicauto-cup-2016-photo",....]


new_list = [i for i in list_of_urls if len(re.findall("photo+", i.split()[-1])) == 0 and len(re.findall("tv-special-news+", i.split()[-1])) == 0]

您只需將鏈接存儲在列表中,然后使用正則表達式對其進行迭代:

re_pattern = r'\\ b(?:tv-special-news | photo)\\ b'

re.findall(re_pattern,link)

(其中鏈接將是列表中的項目)

如果模式匹配,則它將結果存儲在列表中。 您只需檢查列表是否為空。 如果列表為空,則可以包括鏈接,否則將其排除。

這是示例代碼:

import re

links = ['http://auto.com/index.php/car-news/12158-classicauto-cup-2016-photo', 'http://auto.com/index.php/car-news/11654-battle-royale-2014', 'http://auto.com/index.php/tv-special-news/10480-new-film-4', 'http://auto.com/index.php/first/12234-new-volvo-xc60']

new_list = []

re_pattern = r'\b(?:tv-special-news|photo)\b' for link in links:    result = re.findall(re_pattern,link)        if len(result) < 1:         new_list.append(link)   

print new_list

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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