仅从url提取域名,去掉路径(Python)

仅从url提取域名,去掉路径(Python),python,Python,我一直在尝试从URL列表中提取域名,以便http://supremecosts.com/contact-us/将变成http://supremecosts.com。我正试图找到一种干净的方法来实现这一点,它将适用于各种GTLD和CCTLD 您可以使用正则表达式提取URL的域和子域 /^(?:https?:\/\/)?(?:[^@\/\n]+@)?(?:www\.)?([^:\/\n]+)/im 我用这样的方式从URL中提取域。 检查这是否适用于您 一个正则表达式,用于解析和分解指向域名、协议和

我一直在尝试从URL列表中提取域名,以便
http://supremecosts.com/contact-us/
将变成
http://supremecosts.com
。我正试图找到一种干净的方法来实现这一点,它将适用于各种GTLD和CCTLD

您可以使用正则表达式提取URL的域和子域

/^(?:https?:\/\/)?(?:[^@\/\n]+@)?(?:www\.)?([^:\/\n]+)/im
我用这样的方式从URL中提取域。 检查这是否适用于您

一个正则表达式,用于解析和分解指向域名、协议和查询的完整URL,如下面的正则表达式

^((http[s]?|ftp):\/)?\/?([^:\/\s]+)((\/\w+)*\/)([\w\-\.]+[^#?\s]+)(.*)?(#[\w\-]+)?$ 
正则表达式的位置是这样的

url: RegExp['$&'],
protocol you are using at RegExp.$2
domain name at RegExp.$3
path at RegExp.$4

假设您正在使用
python3
,并且不想将
regex
用于作业

>>> from urllib.parse import urlparse
>>> url = "http://supremecosts.com/contact-us/"
>>> obj = urlparse(url)
>>> obj
ParseResult(scheme='http', netloc='supremecosts.com', path='/contact-us/', params='', query='', fragment='')
>>> obj.geturl()
'http://supremecosts.com/contact-us/'
>>> obj.netloc
'supremecosts.com'

您可以像这样使用正则表达式:

import re

text = 'http://supremecosts.com/contact-us/'

m = re.search('(https?:\/\/[^:\/\n]+)', text)
if m:
    print(m.group(1))

工作可能是一种愚蠢但有效的方法:

将URL保存为字符串并从后向前扫描。一旦你遇到一个句号,就把前面3格的所有东西都扔掉。我相信URL在域名之后没有句号。如果我错了,请纠正我。

请记住一个提示-如果url来自您无法控制的来源,请记住“//supremecosts.com/contact-us/”也是有效的url。(例如没有http/https)回答得很好,干杯,但是如果标准库中有
urlparse
,为什么要使用基于正则表达式的解决方案呢?
urlparse
也可以使用,但在这种情况下,您必须将
方案
netloc
合并以获得所需的结果,如:
urlObj.scheme+”:/“+urlObj.netloc