Извлечение domain из url

Мой код:

import re
domain = re.match('\/\/(.*?)\/', 'https://ru.stackoverflow.com/questions')
print(domain)

Ожидаемый результат:

ru.stackoverflow.com

Печатает None, в чем ошибка?


Ответы (1 шт):

Автор решения: CrazyElf

Из описания функции match: "Try to apply the pattern at the start of the string". Он ищет совпадение с начала строки. Вот так уже ищется, если указать, что до вашего шаблона могут быть произвольные символы:

domain = re.match('.*\/\/(.*?)\/', 'https://ru.stackoverflow.com/questions')
                   ^^

Вывод:

<re.Match object; span=(0, 29), match='https://ru.stackoverflow.com/'>

Ну или используйте findall:

domain = re.findall('\/\/(.*?)\/', 'https://ru.stackoverflow.com/questions')

Вывод:

['ru.stackoverflow.com']

А вообще URL-и нужно парсить специальными библиотеками, уж больно много там особенностей может быть, все их довольно сложно предусмотреть:

from urllib.parse import urlparse

print(urlparse('https://ru.stackoverflow.com/questions'))

Вывод:

ParseResult(scheme='https', netloc='ru.stackoverflow.com', path='/questions', params='', query='', fragment='')
→ Ссылка