stripURL-Python

stripURL-Python,python,regex,url,strip,Python,Regex,Url,Strip,好的,我如何使用regex删除http和/或www以获得http://www.domain.com/进入domain.com 假设x是任何类型的TLD或cTLD 输入示例: www.domain.x 输出: domain.x不要使用regex,使用urlparse获取netloc >>> x = 'http://www.domain.com/' >>> from urlparse import urlparse >>> o = urlpar

好的,我如何使用regex删除http和/或www以获得http://www.domain.com/进入domain.com

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

输入示例

www.domain.x

输出


domain.x

不要使用regex,使用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
>>> 

下面是一种方法:

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

如果确实要使用正则表达式而不是
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:])

str.lstrip([chars])返回删除前导字符的字符串副本。chars参数是一个字符串,指定要删除的字符集。如果省略或无,chars参数默认为删除空白。chars参数不是前缀;相反,它的所有值的组合都被剥离了:
>>'sparge'.lstrip()
'sparge'
>'www.example.com'.lstrip('cmowz')
'example.com'
值得一提的是,还有www-pub、www-groups、wwwww2、,www3和其他类似www的前缀我在我的第一篇文章中成功地粘贴了错误的正则表达式,但现在它被编辑成了正确的正则表达式。@Natsume让我思考,我更新了正则表达式,所以“http://”是可选的,它可以接受任何协议,比如“https://”或“bzr://”。@Wooble我不会说得很糟糕,因为它返回了“co.uk”,但我理解这个问题。我正在为此添加一个解决方案。
o.netloc.startswith('www.)
比o.netloc中的
'www'更合适。
@Janne Karila:谢谢Janne。在快速回答中完全失去了这一点。这当然是正确的方式,而不是我介绍的方式。事实上,这是不正确的。python 3.5:从urllib.parse导入URLPASSENICE,但它不包括URL中缺少“www”的位置。可以使用下面的re匹配来检查所需的子字符串“www”是否存在:>>>打印p1.match(“www”)