Как найти доменное имя по ссылке?
Пытаюсь с помощью регулярных строк найти доменные имена по ссылкам. На каких-то ссылках корректно работает, а где-то нет.
Пример:
Есть ссылка
https://ru.stackoverflow.com/questions/ask
Мне нужно найти доменное имя:
https://ru.stackoverflow.com/
Я использую следующее регулярное выражение:
.*[://].*[/]{1}
Но код почему-то находит мне вот эту часть -
https://ru.stackoverflow.com/questions/
Хотя при использовании других ссылок всё работает как положено.
Ссылка
https://vc.ru/new
Что нашёл по регулярной строке -
https://vc.ru/
Проблема в том, что какие-то ссылки корректно обрабатываются, а какие-то нет. В чём проблема?
P.S. В ответах на форуме не нашёл подходящего вопроса. Только поиск домена без https/http. Мне нужен поиск вместе с протоколом
Ответы (3 шт):
Используйте "ленивый" квантификатор .+? и удалите ненужные квадратные скобки
import re
for txt in ['https://ru.stackoverflow.com/questions/ask', 'https://vc.ru/new','ftp://public.ftp-servers.example.com/mydirectory/myfile.txt']:
print(re.search(r'.*://.+?/', txt)[0])
https://ru.stackoverflow.com/
https://vc.ru/
ftp://public.ftp-servers.example.com/
А почему бы не использовать стандартные библиотеки для парсинга url?
from urllib.parse import urlparse, urlunparse, ParseResult
url = urlparse('https://ru.stackoverflow.com/questions/ask')
print(url)
print(urlunparse(ParseResult(url.scheme, url.netloc, '', '', '', '')))
Вывод:
ParseResult(scheme='https', netloc='ru.stackoverflow.com', path='/questions/ask', params='', query='', fragment='')
https://ru.stackoverflow.com