2012-12-07 204 views
0

我有一堆(醜陋的,如果我可以說)網址,我想用Python正則表達式來清理。所以,我的網址看起來像:蟒蛇正則表達式網址

http://www.thisislink1.com/this/is/sublink1/1 
http://www.thisislink2.co.uk/this/is/sublink1s/klinks 
http://www.thisislinkd.co/this/is/sublink1/hotlinks/2 
http://www.thisislinkf.com.uk/this/is/sublink1d/morelink 
http://www.thisislink1.co.in/this/is/sublink1c/mylink 
.... 

我希望做的是清理這些URL,從而使最終的鏈接看起來像:

http://www.thisislink1.com 
http://www.thisislink2.co.uk 
http://www.thisislinkd.co 
http://www.thisislinkf.de 
http://www.thisislink1.us 
.... 

,我想知道我怎麼能以pythonic的方式實現這一點。對不起,如果這是一個101問題 - 我是python正則表達式結構的新手。

回答

7

使用urlparse.urlsplit

In [3]: import urlparse  

In [8]: url = urlparse.urlsplit('http://www.thisislink1.com/this/is/sublink1/1') 

In [9]: url.netloc 
Out[9]: 'www.thisislink1.com' 

在Python3這將是

import urllib.parse as parse 
url = parse.urlsplit('http://www.thisislink1.com/this/is/sublink1/1') 
+0

謝謝。另外感謝py3代碼! – AJW

6

爲什麼要使用正則表達式?

>>> import urlparse 
>>> url = 'http://www.thisislinkd.co/this/is/sublink1/hotlinks/2' 
>>> urlparse.urlsplit(url) 
SplitResult(scheme='http', netloc='www.thisislinkd.co', path='/this/is/sublink1/hotlinks/2', query='', fragment='') 
+0

太棒了。我不知道urlparse - 我必須說非常方便。再次感謝。我已經接受你的答案。 urlparse.urlsplit(url).netloc解決了這個問題。 – AJW

+0

剛剛看到@unutbu先到那裏(幾秒鐘),跟他們一起去! –

+0

好的喬恩 - 我會接受unutbu的答案 - 再次感謝您的幫助! – AJW

0

也許使用這樣的:

result = re.sub(r"(?m)(http://(www)?\..*?)/", r"\1", subject) 
1

你應該使用URL解析器像其他人所說,但爲了完整性這裏是正則表達式的解決方案:

import re 

url='http://www.thisislink1.com/this/is/sublink1/1' 

re.sub('(?<![/:])/.*','',url) 

>>> 'http://www.thisislink1.com' 

說明:

匹配之後的所有內容,包括前面沒有加上的第一個正向符號或/並將其替換爲''

(?<![/:]) # Negative lookbehind for '/' or ':' 
/.*  # Match a/followed by anything