2014-03-25 135 views
2

我有多個鏈接...正則表達式來獲得。com的

linkslist = 
[https://test.com 
,https://test1.example.com/exm/1/2/3/4 
,https://test2.example.test.com/exm/1/2/3/4 
,http://test3.com] 

從這個,我只需要提取以下,

https://test.com 
https://test1.com 
https://test2.com 
http://test3.com 

我曾嘗試以下,

if re.search("http*.com",string1): 
...  print "found" 
+0

正則表達式是什麼味道都你在用嗎? – ishaaq

+0

更新了問題 – user1050619

+0

它會永遠是.com域名嗎?或者你可以有不同的域名後綴,如.net或.org? – user3446496

回答

3

更新:修正了感謝@Robin。它的工作,但它有點偏離我的意圖。

假設只有HTTP或HTTPS(沒有端口),這工作:

(https?://(?:\w+\.)+com)(?:/.*)? 

Regular expression visualization

Debuggex Demo

的URL是在捕獲組之一。的(?:\w+\.)+

說明:

  • 一個或更多的的
    • 一個或更多的字字符:字母,數字或下劃線
    • 其次是文字點。

例如,該部分捕獲usatoday.entertainment.usatoday.。所有預域(.com)的URL的部分。

爲了安全起見,你還可以添加開始和結束的行錨:

^(https?://(?:\w+\.)+com)(?:/.*)?$ 

要添加不同域的可能性,加上他們是這樣的:

^(https?://(?:\w+\.)+(?:com|net|org|gov))(?:/.*)?$ 

注意這個問題,它的重複,也將有所幫助:regular expression for url

+0

你能開發一下'(?:\ w +。)+'的重點嗎? – Robin

+0

呵呵。這是不對的。就是這樣。我會解決它,並在更新中解釋它。給我一點時間。很高興你說了些什麼。 – aliteralmind

+0

@ user1050619:我的回答有一個小問題,已經修復。 – aliteralmind

1

如果你不想成爲具體介紹一下.com部分,你可以使用這個。它將匹配以http或者https網址,它只會匹配,直到直到第一個正斜槓或串/行的末尾,包括任何端口號可能存在​​。

/https?:\/\/[^\/$\s]+/i 

這些結果如下:

https://test.com -> https://test.com 
https://test1.example.com/exm/1/2/3/4 -> https://test1.example.com 
https://test2.example.test.com/exm/1/2/3/4 -> https://test2.example.test.com 
http://test3.com -> http://test3.com 
https://test.com:8080 -> https://test.com:8080 
https://test1.example.com:3000/exm/1/2/3/4 -> https://test1.example.com:3000 
https://test2.example.test.com:80/exm/1/2/3/4 -> https://test2.example.test.com:80 
http://test3.com:8000 -> http://test3.com:8000 

如果要排除的端口號,只需添加一個冒號到非匹配組:

/https?:\/\/[^\/$\s:]+/i 

如果你想請具體說明。COM的一部分,只需添加這最後:

https?:\/\/[^\/\s]+\.com 

如果只想.COM域,但想包括端口號,這是要走的路:

https?:\/\/[^\/\s]+\.com(:\d+)? 
+0

+1,可以很容易地允許破折號。這是一個很好的觀點,不管前面有什麼先行斜線,儘管爲了安全起見,我會至少強制執行一些特定字符級別(例如'[\ w。] +'),而不僅僅是「不要斜線」。 – aliteralmind

+1

取決於我猜的用例。由於不同的頂級域名允許不同的本地化字符集,即挪威語.no域允許æ,ø和å等字符,所以針對合法字符進行測試需要的不僅僅是RegExp。根據使用的RegExp引擎,一個簡單的\ w(單詞字符)匹配器可能不夠用。在JS \ w不匹配這些字符。 – nordhagen

+0

這是一個很大的話題,對吧?我在自己的答案中提供了更全面的答案。 – aliteralmind