Раскрытие возможностей регулярных выражений: различные способы извлечения доменных имен

Регулярное выражение, сокращение от регулярного выражения, — это мощный инструмент для сопоставления шаблонов и манипулирования текстом. Когда дело доходит до извлечения доменных имен из строк, регулярное выражение может оказаться невероятно удобным. В этой статье мы рассмотрим несколько методов, сопровождаемых разговорными объяснениями и примерами кода, которые помогут вам овладеть искусством извлечения доменных имен с помощью регулярных выражений.

Метод 1: базовый шаблон регулярного выражения
Давайте начнем с простого шаблона регулярного выражения, который может соответствовать большинству доменных имен. Следующий шаблон охватывает часто используемые расширения домена:

import re
def extract_domain_name(url):
    pattern = r"(?:https?://)?(?:www\.)?([a-zA-Z0-9-]+(?:\.[a-zA-Z]+)+)"
    match = re.search(pattern, url)

    if match:
        return match.group(1)
    else:
        return None
# Example usage
url = "https://www.example.com"
domain_name = extract_domain_name(url)
print(domain_name)  # Output: example.com

Объяснение: Шаблон регулярного выражения (?:https?://)?(?:www\.)?([a-zA-Z0-9-]+(?:\.[a-zA-Z]+)+)соответствует необязательному «http://» или «https://», необязательному «www.» и фиксирует имя домена, состоящее из буквенно-цифровых символов и дефисы. Он также поддерживает многоуровневые расширения доменов, такие как «.com», «.co.uk» и т. д.

Метод 2: обработка субдоменов
Если вы хотите извлечь субдомены вместе с именем домена, вы можете изменить шаблон регулярного выражения следующим образом:

def extract_domain_with_subdomains(url):
    pattern = r"(?:https?://)?([a-zA-Z0-9-]+(?:\.[a-zA-Z]+)+)"
    match = re.search(pattern, url)

    if match:
        return match.group(1)
    else:
        return None
# Example usage
url = "https://blog.example.com"
domain_name = extract_domain_with_subdomains(url)
print(domain_name)  # Output: blog.example.com

Объяснение: удаляя часть (?:www\.)?из шаблона, мы разрешаем захват любого субдомена вместе с именем домена.

Метод 3: обработка интернационализированных доменных имен (IDN)
Regex также может обрабатывать доменные имена с символами, отличными от ASCII, известными как интернационализированные доменные имена (IDN). Вот пример:

def extract_idn_domain(url):
    pattern = r"(?:https?://)?([^\s/?\.]+\.[^\s/?\.]+)"
    match = re.search(pattern, url)

    if match:
        return match.group(1)
    else:
        return None
# Example usage
url = "https://www.блог-пример.рф"
domain_name = extract_idn_domain(url)
print(domain_name)  # Output: блог-пример.рф

Объяснение: Шаблон регулярного выражения ([^\s/?\.]+\.[^\s/?\.]+)фиксирует любую последовательность символов, кроме пробелов, косой черты или точки, за которой следует точка, а затем другая последовательность символов, кроме пробелов, косой черты или точки. точка.