Я нахожу электронное письмо из заданной строки и возвращаю электронное письмо, существующее в строке

#python #regex #regex-lookarounds #regex-group

#python #регулярное выражение #поиск регулярных выражений #группа регулярных выражений

Вопрос:

Мои требования-

имя: имя представляет собой буквенно-цифровую строку, которая меньше или равна 12 символам. Допустимыми дополнительными символами являются тире (-), точка (.) и подчеркивание (_). Но электронное письмо не может начинаться или заканчиваться этими дополнительными символами. Имя также должно быть длиной не менее 1 символа. Значения имен примеров: a, ab, a_b, A__B..C—D, 1nt3r3st.1ng

домен: домен строго числовой, и число должно быть кратно 5. длина домена не ограничена. Пример значений домена: 984125, 0

окончание: электронное письмо должно заканчиваться (.com) или (.ca) (с учетом регистра)

Exmaple:

 find_special_email('12345a_test_email@165265365.com!')

'a_test_email@165265365.com'
 

Что я пробовал:

 import re

def find_special_email(str):
   match = re.search(r'[a-zA-Z0-9_.-]{1,12}@[0-9] .(com|ca)(.[a-z]{2,3})?', str)
   return match.group(0)


print(find_special_email('12345a_test_email@165265365.com!'))
print(find_special_email('A__B..C--D@165265365.com!'))
 

Мои проблемы:

  1. электронное письмо не может начинаться или заканчиваться этими дополнительными символами, например, тире (-), точка (.) и подчеркивание (_)
  2. Я не знаю, как сопоставить «домен», который делится на 5

Комментарии:

1. Регулярное выражение не очень хорошо работает с числами, но это конкретное числовое требование можно перефразировать как «заканчивается на 0 или 5».

2. Доменные имена по определению не чувствительны к регистру.

3. Ваш «exmaple» странный. Почему вы хотите извлечь частичный адрес?

Ответ №1:

Это регулярное выражение — https://regex101.com/r/wSS0ES/4 может помочь.

Регулярное выражение: [a-zA-Z0-9](?:[a-zA-Z0-9_.-]{0,10}[a-zA-Z0-9])?@[0-9]*[05] .(?:com|ca)(?:.[a-z]{2,3})?

Внесены изменения:

  1. С префиксом [a-zA-Z0-9] , чтобы электронное письмо начиналось с допустимого символа.
  2. (?:[a-zA-Z0-9_.-]{0,10}[a-zA-Z0-9])? — после первого символа адрес может необязательно содержать от 0 до 10 всех допустимых символов в середине, но должен заканчиваться буквенно-цифровым символом. Все выражение сделано необязательным, чтобы оно могло соответствовать одному допустимому символу в адресной части.
  3. [0-9]*[05] — это гарантирует, что домен может содержать несколько номеров, но он должен заканчиваться на 0 или 5