Форум сайта python.su
Нужно составить регулярное выражение для имени пользователя перед @ в e-mail которое удовлетворяло бы следующим требованиям :
1)имя (до @) не длиннее 128 символов, состоит из символов a-z0-9“._-
2)в имени не допускаются две точки подряд;
3)если в имени есть двойные кавычки ”, то они должны быть парными;
4)в имени могут встречаться символы “!,:”, но только между двойными кавычками.
По отдельности на каждую строчку я могу написать условие, но всё вместе в одно выражение собрать не получается. И вообще возможно ли выполнить условие “в имени не допускаются две точки подряд” одновременно с другими?
Мои наработки ( условие 4 я пока никак не учёл ):
def valid_hostname ( hostname) : # имя (до @) не длиннее 128 символов, состоит из символов a-z0-9"._-; p_hostname = re.compile(u'[\.a-z0-9"_-]{1,128}$') if not ( p_hostname.match(hostname) ) : return False # в имени не допускаются две точки подряд; if re.search( u"\.\.", hostname ) : return False # если в имени есть двойные кавычки ", то они должны быть парными; l = re.compile(r'"') if ( len( l.findall(hostname) ) % 2 ) == 1 : return False return True
Офлайн
Задание от Яндекса?
Как-то некашерно просить помощь когда решаешь задание для устройства на работу.
Если это ради интереса - можно найти и поинтереснее задачки
Офлайн
import re valid = ( '"qwe"', 'qwe"qwe"', 'qwe"qw!:,e"', 'qwe"qw!:,e"qwe', '.qw.e"qw!:,e"qw.e"qw!:,e"qw.e"".', 'a"."b', ) invalid = ( 'qwe..qwe', 'qwe"qwe', 'qwe"q"qwe"', 'qwe"q"d"', "qwe!qwe", 'qwe".."qwe' ) regex = re.compile('(?:(?:"(?:[a-z-0-9_!:,]|(?:\.(?!\.)))*")|(?:[a-z-0-9_])|(?:\.(?!\.)))+$') for name in valid: print('{:<40}{}'.format(name, ('FAIL', 'OK')[regex.match(name) is not None])) print() for name in invalid: print('{:<40}{}'.format(name, ('FAIL', 'OK')[regex.match(name) is None]))
Отредактировано sergeek (Сен. 16, 2013 16:20:14)
Офлайн
> Как-то некашерно просить помощь когда решаешь задание для устройства на работу.
Как-то некошерно писать кошерность через А.
Офлайн
Огромное спасибо, очень элегантное решение! Буду вечером его разбирать, сходу не могу понять. Не могли бы Вы подсказать литературу по регулярным выражениям? (Я изучал их по книжке издательства o'relly “регулярные выражения” и паре статей на хабре )
Frog-king
Задание от Яндекса? Как-то некашерно просить помощь когда решаешь задание для устройства на работу.Если это ради интереса - можно найти и поинтереснее задачки
Офлайн
> Не могли бы Вы подсказать сайт или книгу где есть интересные задачи?
http://projecteuler.net/
Офлайн
Не думаю что регекспы стоят отдельной книги, в документации вроде бы все вполне доступно описано.
Офлайн
> Не думаю что регекспы стоят отдельной книги
А вот Джефри Фридл иного мнения
Офлайн
lorienИ я о том же подумал…
А вот Джефри Фридл иного мнения
Отредактировано 4kpt (Сен. 15, 2013 18:58:07)
Офлайн
lorienя, кажется даже скачивал эту книгу, но что-то мне там не понравилось)
А вот Джефри Фридл иного мнения
Офлайн