2014-01-19 21 views
0

我試圖讓Python中的正則表達式,其捕獲在一個網址:在Python中,如何做正則表達式捕獲一個<a href標記中的url?

<a href tag 

例如,如果我藉此:

<a href="http://www.simplyrecipes.com/recipes/broccoli_slaw_with_cranbery_orange_dressing/" n title="Permalink to Broccoli Slaw with Cranberry Orange Dressing" rel="bookmark"><img width="520" height="347" 

我需要這個表情被逮住:

<a href="http://www.simplyrecipes.com/recipes/broccoli_slaw_with_cranbery_orange_dressing/" 

所以這是我做了什麼:

^<a href="http://www(???what to put in here????)"$ 

但我不知道如何處理www必須包括但沒有特別處理後的表達部分。

在此先感謝您的任何啓示!

+2

記住,常規表達式還不夠完善,不能解析任何XML http://stackoverflow.com/a/1732454/7918。 –

+0

這總是值得指出的,但所有他/他需要的是匹配雙引號。 – alexis

回答

2

所有不是"[^"]

所以你可以把: [^"]*"

,並得到: '<a href="[^"]*"'

+0

謝謝它的作品! stackoverflow說我可以在40秒內接受答案:O – user2305415

1

你很快就會發現,並不是所有網址的開頭爲www,許多甚至不要從http://開始。以下是如何抽取所有 URL鏈接的href屬性:匹配<a href=後面的引號內的所有內容。空間是各個地方的法律的HTML標籤,這會使事情變得複雜了一點內部:

matchobj = re.search(r'<\s*a\s+href\s*=\s*"([^"]*)', text, re.IGNORECASE) 
url = matchobj.group(1) 

這也將讓你相對URL等協議,除了HTTP。如果你對所有的東西都不感興趣,那麼在你提取結果後對結果進行排序會更容易。

1

使用import re

urls = re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[[email protected]&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', url) 
相關問題