2009-01-24 64 views
4

我試圖做一個正則表達式,將正確的網址捕捉,包括那些被包裹在括號中(http://example.com)和http://www.codinghorror.com/blog/archives/001181.htmlPython的正則表達式添加鏈接到URL

上編碼的恐怖談過我目前正在使用以下內容在python中爲以http和www開頭的鏈接創建HTML A標籤。

r1 = r"(\b(http|https)://([-A-Za-z0-9+&@#/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#/%=~_()|]))" 
r2 = r"((^|\b)www\.([-A-Za-z0-9+&@#/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#/%=~_()|]))" 
return re.sub(r2,r'<a rel="nofollow" target="_blank" href="http://\1">\1</a>',re.sub(r1,r'<a rel="nofollow" target="_blank" href="\1">\1</a>',text)) 

這個效果很好,除了那裏有人在包裝括號鏈接的情況。有沒有人有更好的方法?

回答

4

問題是,URL可能會有括號作爲其中的一部分......(http://en.wikipedia.org/wiki/Tropical_Storm_Alberto_(2006))。你無法單獨使用正則表達式,因爲它沒有狀態。你需要一個解析器。所以你最好的機會是使用解析器,並嘗試猜測正確的右括號。這很容易出錯(網址可能會打開括號,也不會關閉它),所以我想你的運氣不好。

另請參閱http://en.wikipedia.org/wiki/,或(http://en.wikipedia.org/wiki/))和其他類似的有效URL。