Regex получает доменное имя от электронной почты
Я изучаю регулярные выражения и не могу получить google
с адреса электронной почты
строка
[email protected]
Я просто хочу получить Google, а не Google.com
Regex:
[^@].+(?=\.)
Результат: https://regex101.com/r/wA5eX5/1
Из моего понимания. Это игнорирует @
найти строку после этого, пока .
(точка), используя (?=\.)
Что я сделал не так?
Ответы
Ответ 1
[^@]
означает "соответствовать одному символу, который не является знаком @
. Это не то, что вы ищете - используйте lookbehind (?<[email protected])
для @
и ваш (?=\.)
lookahead для \.
чтобы извлечь сервер имя в середине:
(?<[email protected])[^.]+(?=\.)
Средняя часть [^.]+
Означает "один или несколько символов без точек".
Demo.
Ответ 2
Обновленный ответ:
Используйте группу захвата и держите это простым :)
@(\w+)
Объяснение, разделив его
(
группа захвата для извлечения )
\w
обозначает символ слова [A-Za-z0-9_]
+
является квантификатором для одного или нескольких вхождений \w
Regex объяснение и демонстрация на Regex101
Ответ 3
Я использовал решение regex для своей задачи, но понял, что некоторые из этих писем не так легки: [email protected]
, [email protected]
и [email protected]
Для тех, кто пришел сюда, желая поддомену (или обрезается им), здесь регулярное выражение:
(?<[email protected])[^.]*.[^.]*(?=\.)
Ответ 4
Это должно быть регулярное выражение:
(?<[email protected])[^.]+
(?<[email protected])
- помещает поиск сразу после @
[^.]+
- взять все символы, которые не являются точками (останавливается на точке)
Итак, он извлекает google
из адреса электронной почты.
Ответ 5
Может быть, не строго "полный регулярный запрос", но более гибкий (в случае, если часть до @не "first.last" ) будет использовать cut:
cut -d @ -f 2 | cut -d . -f 1
Первый разрез будет изолировать часть после @, а вторая - получить то, что вы хотите.
Это будет работать и для других типов шаблонов электронной почты: [email protected]/xxx.yyy.zzz @server.com и т.д.
Ответ 6
Это относительно простое регулярное выражение, и оно захватывает все между @
и окончательным расширением домена (например,.com,.org). Это позволяет доменные имена, которые состоят из несловесных символов, которые существуют в реальных данных.
>>> regex = re.compile(r"^[email protected](.+)\.[\w]+$")
>>> regex.findall('[email protected]')
['my-bank']
>>> regex.findall('[email protected]')
['spam']
>>> regex.findall('[email protected]')
['sandnes.district']
Ответ 7
Поскольку я работал, чтобы получить доменное имя адресов электронной почты, и ни один не соответствовал тому, что мне было нужно:
- Не ловить субдомены
- Для сопоставления топовых доменов стран (например
.com.ar
или co.jp
)
Например, в [email protected]
мне нужно сопоставить domain.com.mx
Итак, я сделал это:
[^[email protected]]*?\.\w{2,}$|[^[email protected]]*?\.com?\.\w{2}$
Вот ссылка на regex101 для иллюстрации регулярного выражения: https://regex101.com/r/vE8rP9/59
Вы можете получить имя sumdomain (без домена верхнего уровня, например: .com
или .com.mx
), добавив операторы поиска (но оно будет совпадать дважды в [email protected]
):
[^[email protected]]*?(?=\.\w{2,}$)|[^[email protected]]*?(?=\.com?\.\w{2}$)