解析主机名和端口从字符串或u

2024-04-30 16:03:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我可以得到以下任何格式的字符串:

我想提取主机,如果存在端口。如果端口值不存在,我希望它默认为80。

我试过urlparse,它对url很好,但对另一种格式不行。例如,当我在hostname:port上使用urlparse时,它会将主机名放在方案中,而不是放在netloc中。

我很高兴有一个使用urlparse和regex的解决方案,或者一个可以同时处理这两种格式的regex。


Tags: 端口字符串comhttpurlportwww格式
3条回答

我对urlparse不太熟悉,但使用regex,您可以执行以下操作:

p = '(?:http.*://)?(?P<host>[^:/ ]+).?(?P<port>[0-9]*).*'

m = re.search(p,'http://www.abc.com:123/test')
m.group('host') # 'www.abc.com'
m.group('port') # '123'

或者,没有端口:

m = re.search(p,'http://www.abc.com/test')
m.group('host') # 'www.abc.com'
m.group('port') # '' i.e. you'll have to treat this as '80'

编辑:修复了regex,使其也与“www.abc.com 123”匹配

>>> from urlparse import urlparse   
>>> aaa = urlparse('http://www.acme.com:456')

>>> aaa.hostname  
'www.acme.com'

>>> aaa.port   
456
>>> 

您可以使用urlparse从URL字符串获取主机名:

from urlparse import urlparse
print urlparse("http://www.website.com/abc/xyz.html").hostname # prints www.website.com

相关问题 更多 >