#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!'))
Мои проблемы:
- электронное письмо не может начинаться или заканчиваться этими дополнительными символами, например, тире (-), точка (.) и подчеркивание (_)
- Я не знаю, как сопоставить «домен», который делится на 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})?
Внесены изменения:
- С префиксом
[a-zA-Z0-9]
, чтобы электронное письмо начиналось с допустимого символа. (?:[a-zA-Z0-9_.-]{0,10}[a-zA-Z0-9])?
— после первого символа адрес может необязательно содержать от 0 до 10 всех допустимых символов в середине, но должен заканчиваться буквенно-цифровым символом. Все выражение сделано необязательным, чтобы оно могло соответствовать одному допустимому символу в адресной части.[0-9]*[05]
— это гарантирует, что домен может содержать несколько номеров, но он должен заканчиваться на 0 или 5