2011-01-25 641 views
1

我需要一个正则表达式去掉url的域名部分。因此,举例来说,如果我有以下网址:正则表达式需要去掉域名

http://www.website-2000.com

位我想正则表达式匹配会“网站2000”

如果你也能解释其中的每一部分正则表达式可以帮助我理解这将会很棒。

感谢

+1

那么,什么语言? – 2011-01-25 09:34:52

+0

[RegEx的域名验证]的可能重复(https://stackoverflow.com/questions/10306690/domain-name-validation-with-regex) – csilk 2017-11-22 00:22:15

回答

7

这一个应该工作。它可能有一些缺陷,但我现在没有想到。如果有人想改进它,请随时这样做。

/http:\/\/(?:www\.)?([a-z0-9\-]+)(?:\.[a-z\.]+[\/]?).*/i 

http:\/\/   matches the "http://" part 
(?:www\.)?   is a non-capturing group that matches zero or one "www." 
([a-z0-9\-]+)  is a capturing group that matches character ranges a-z, 0-9 
        in addition to the hyphen. This is what you wanted to extract. 
(?:\.[a-z\.]+[\/]?) is a non-capturing group that matches the TLD part (i.e. ".com", 
        ".co.uk", etc) in addition to zero or one "/" 
.*     matches the rest of the url 

http://rubular.com/r/ROz13NSWBQ

0
http://wwww.([^/]+) 

无需使用正则表达式,使用里urlparse模块

>>> from urlparse import urlparse 
>>> '.'.join(urlparse("http://www.website-2000.com").netloc.split('.')[-2:]) 
'website-2000.com' 

+0

对不起,我需要用正则表达式 – geoffs3310 2011-01-25 09:33:48

+0

哦,愚蠢的我,didn注意这不是一个蟒蛇问题 – Kimvais 2011-01-25 09:37:17

+0

嗯,那肯定比我的巨兽简单一些。 – hlindset 2011-01-25 09:53:45

0

这一个可以让你不担心任何的HTTP/HTTPS/FTP等..在前面,也抓住所有的子域了。

(?:www\.)?([a-z0-9\-.]+)(?:\.[a-z\.]+[\/]?).*/i 

失败的是我发现的唯一时间是: - 如果一个。在域名/子域名之前没有任何文字,包含在正则表达式捕获中。 - 电子邮件与。在他们不会工作。在站点/子

0
r/^[^:]+:\/\/[^/?#]+// 

这为我工作的中间空白 - (首先通过正则表达式运行前的@符号检查通过域解决这个问题) 。

它会匹配任何方案或协议,然后在://匹配任何不是/要么 #。这三个字符首次出现在URL中时,表示域名结束,以便我结束匹配。