2

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

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

输入示例

http://www.domain.x/

www.domain.x

输出

域.x

4

3 回答 3

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
>>> 
于 2012-06-28T10:10:06.120 回答
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()

(“谷歌”,“co.uk”)

因此,您必须检查“co.uk”等域的结果,并在这种情况下再次加入结果。普通域应该可以正常工作。当您有多个子域时,我无法使其工作。

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

>>> domain = 'http://www.example.com/'
>>> '.'.join(domain.replace('http://','').split('/')[0].split('.')[-2:])
于 2012-06-28T10:28:14.873 回答
1

这是其中一种方法:

    >>>import re
    >>>str1 = 'http://www.domain.x/'
    >>>p1 = re.compile('http://www.|/')
    >>>out = p1.sub('',str1)
于 2012-06-28T10:26:27.513 回答