2012-05-06 47 views
2

我一直在嘗試使用re api從文本文件中提取URL。任何以http://,https://和www開頭的鏈接。使用正則表達式重新字符串匹配提取URL鏈接 - Python

該文件包含文本以及html源代碼,html部分很容易,因爲我可以使用BeautifulSoup提取它們,但普通文本似乎更具挑戰性。 我在網上發現這似乎是URL提取的最佳實現,但它在某些標記上失敗,特別是它無法處理標記並將它們包含在URL中。 任何幫助表示讚賞,因爲我不熟悉的字符串匹配都自己

這裏是簽名

sp1=re.findall("http[s]?://(?:[a-zA-Z]|[0-9]|[[email protected]&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+", str(STRING)) 
sp2=re.findall('www.(?:[a-zA-Z]|[0-9]|[[email protected]&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', str(STRING)) 

例子:

http://www.website.com/science/</span></a><o:p></o:p></span></div><div 
www.website.com/library/</span></a></span></i><span 
http://awebsite.com/Groups</a><div> 

回答

6
re.findall(r'https?://[^\s<>"]+|www\.[^\s<>"]+', str(STRING)) 

[^\s<>"]+部分匹配任何非空白字符,非引號,非角字符串字符以避免匹配字符串,例如:

<a href="http://www.example.com/stuff"> 
http://www.example.com/stuff</br> 
+0

真棒,工程就像一個冠軍:)感謝隊友 – Eternity