Найти - Пользователи
Полная версия: Составить регулярное выражение
Начало » Python для новичков » Составить регулярное выражение
1 2
SoT
Нужно составить регулярное выражение для имени пользователя перед @ в 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  
Frog-king
Задание от Яндекса?
Как-то некашерно просить помощь когда решаешь задание для устройства на работу.

Если это ради интереса - можно найти и поинтереснее задачки
sergeek
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]))
lorien
> Как-то некашерно просить помощь когда решаешь задание для устройства на работу.

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

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

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

http://projecteuler.net/
sergeek
Не думаю что регекспы стоят отдельной книги, в документации вроде бы все вполне доступно описано.
lorien
> Не думаю что регекспы стоят отдельной книги

А вот Джефри Фридл иного мнения
4kpt
lorien
А вот Джефри Фридл иного мнения
И я о том же подумал…
sergeek
lorien
А вот Джефри Фридл иного мнения
я, кажется даже скачивал эту книгу, но что-то мне там не понравилось)
примеров на питоне там мало совсем ЕМНИП
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB