Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 14, 2013 22:17:44

SoT
Зарегистрирован: 2012-12-12
Сообщения: 68
Репутация: +  4  -
Профиль   Отправить e-mail  

Составить регулярное выражение

Нужно составить регулярное выражение для имени пользователя перед @ в 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  

Офлайн

#2 Сен. 14, 2013 23:37:00

Frog-king
Зарегистрирован: 2012-11-30
Сообщения: 31
Репутация: +  1  -
Профиль   Отправить e-mail  

Составить регулярное выражение

Задание от Яндекса?
Как-то некашерно просить помощь когда решаешь задание для устройства на работу.

Если это ради интереса - можно найти и поинтереснее задачки

Офлайн

#3 Сен. 15, 2013 13:29:33

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Составить регулярное выражение

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)

Офлайн

#4 Сен. 15, 2013 15:27:58

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Составить регулярное выражение

> Как-то некашерно просить помощь когда решаешь задание для устройства на работу.

Как-то некошерно писать кошерность через А.

Офлайн

#5 Сен. 15, 2013 17:16:00

SoT
Зарегистрирован: 2012-12-12
Сообщения: 68
Репутация: +  4  -
Профиль   Отправить e-mail  

Составить регулярное выражение

Огромное спасибо, очень элегантное решение! Буду вечером его разбирать, сходу не могу понять. Не могли бы Вы подсказать литературу по регулярным выражениям? (Я изучал их по книжке издательства o'relly “регулярные выражения” и паре статей на хабре )

Frog-king
Задание от Яндекса? Как-то некашерно просить помощь когда решаешь задание для устройства на работу.Если это ради интереса - можно найти и поинтереснее задачки

Это задание не на работу, а на стажировку, что примерно соответствует моему текущему уровню. В других компаниях я тестовых заданий в открытом доступе не нашел. Не могли бы Вы подсказать сайт или книгу где есть интересные задачи?

Офлайн

#6 Сен. 15, 2013 17:38:52

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Составить регулярное выражение

> Не могли бы Вы подсказать сайт или книгу где есть интересные задачи?

http://projecteuler.net/

Офлайн

#7 Сен. 15, 2013 17:42:55

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Составить регулярное выражение

Не думаю что регекспы стоят отдельной книги, в документации вроде бы все вполне доступно описано.

Офлайн

#8 Сен. 15, 2013 18:41:53

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Составить регулярное выражение

> Не думаю что регекспы стоят отдельной книги

А вот Джефри Фридл иного мнения

Офлайн

#9 Сен. 15, 2013 18:57:57

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Составить регулярное выражение

lorien
А вот Джефри Фридл иного мнения
И я о том же подумал…



Отредактировано 4kpt (Сен. 15, 2013 18:58:07)

Офлайн

#10 Сен. 15, 2013 18:59:32

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Составить регулярное выражение

lorien
А вот Джефри Фридл иного мнения
я, кажется даже скачивал эту книгу, но что-то мне там не понравилось)
примеров на питоне там мало совсем ЕМНИП

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version