Извлечь почтовый домен с помощью регулярных выражений Python - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь извлечь имя домена из адресов электронной почты, используя

 domain = re.search('(@^\S$)', email)

Я хочу сопоставить любой символ без пробелов, кроме символа новой строки.Тем не менее, моя переменная ничего не возвращает. Пожалуйста, посоветуйте мне мой следующий процесс:

  • (@ означает, что мы начинаем строку после или после символа @

  • ^ \ S указывает на повторение любых непробельных символов после @

  • $) означаетисключить / n или перевод строки и завершить там

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Метасимвол ^ соответствует началу строки, поэтому размещение его в любом месте, но в начале шаблона, никогда не будет совпадать с чем-либо.

Кроме того, \S будет соответствовать нежелательным символам, вместо этого мы можем взглянуть на спецификации для доменного имени , чтобы точно соответствовать тому, что необходимо.

Наконец, вы можете использовать группу захвата для захвата домена и выбросить @.

import re

email = 'foo@stackoverflow.com'

domain = re.search('@((\w|\w[\w\-]*?\w)\.\w+)', email).group(1)

print(domain) # stackoverflow.com
0 голосов
/ 25 июня 2018

Ваше текущее регулярное выражение соответствует @, за которым следует начало строки, за которым следует один непробельный символ, за которым следует конец ввода.(Я предполагаю, что вы должным образом избежали обратной косой черты для строки в вашем фактическом коде.)

То, что вы хотите сделать, это сопоставить позицию после @, а затем любое числоиз непробельных символов, затем конец ввода:

domain = re.search(r"(?<=@)(\S+$)", email)

Здесь (?<=@) - это просмотр сзади, который проверяет, что предыдущий символ или символы соответствуют содержанию круглых скобок;\S+ соответствует одному или нескольким непробельным символам;и $ соответствует концу строки.

Другой вариант, который не требует регулярных выражений:

domain = email.split("@")[1]
...