带状URL - Python

时间:2012-06-28 10:04:00

标签: python regex url strip

好的我如何使用正则表达式删除http AND / OR www只是为了 http://www.domain.com/ 进入 domain.com

假设x为任何类型的TLD或cTLD

输入示例

http://www.domain.x/

www.domain.x

输出

domain.x

3 个答案:

答案 0 :(得分:7)

不要使用正则表达式,使用urlparse获取netloc

>>> x = 'http://www.domain.com/'
>>> from urlparse import urlparse
>>> o = urlparse(x)
>>> o
ParseResult(scheme='http', netloc='www.domain.com', path='/', params='', query='', fragment='')
>>> 

然后

>>> o.netloc
'www.domain.com'
>>> if o.netloc.startswith('www.'): print o.netloc[4:]
... 
domain.com
>>> 

答案 1 :(得分:4)

如果你真的想使用正则表达式而不是urlparse()或者拆分字符串:

>>> domain = 'http://www.example.com/'
>>> re.match(r'(?:\w*://)?(?:.*\.)?([a-zA-Z-1-9]*\.[a-zA-Z]{1,}).*', domain).groups()[0]
example.com

正则表达式可能有点简单,但有效。它也没有取代,但我认为让域名更容易。

要支持“co.uk”等域名,可以执行以下操作:

>>> p = re.compile(r'(?:\w*://)?(?:.*?\.)?(?:([a-zA-Z-1-9]*)\.)?([a-zA-Z-1-9]*\.[a-zA-Z]{1,}).*')
>>> p.match(domain).groups()

('google','co.uk')

所以你必须检查像'co.uk'这样的域的结果,并在这种情况下再次加入结果。普通域应该可以正常工作。当你有多个子域时,我无法使它工作。

没有正则表达式或花哨模块的单行:

>>> domain = 'http://www.example.com/'
>>> '.'.join(domain.replace('http://','').split('/')[0].split('.')[-2:])

答案 2 :(得分:1)

以下是其中一种方法:

    >>>import re
    >>>str1 = 'http://www.domain.x/'
    >>>p1 = re.compile('http://www.|/')
    >>>out = p1.sub('',str1)