Регулярные выражения

продолжение следует

Домашнее задание

  1. {i} Прочитать о регулярных выражениях на ВикиУчебнике

  2. В тексте «Анны Карениной» найти 25 самых распространённых слов (словом считается последовательность русских букв)

    • Использовать re.split() для разбиения текста на слова

  3. Составить 10 регулярных выражений (обратите внимание, что по условиям регулярному выражению сопоставляется вся строка, т. е. в Python можно использовать findall('^РВ$') или match('РВ$') (match всегда начинается с начала строки). См. тексты задач на сайте «Открытый Зеленоградский турнир». Большая часть задач — очень просты, см. решение последней задачи:

    1. является ли данная строчка строкой "abcdefghijklmnopqrstuv18340" или нет
      • Пример правильных выражений: abcdefghijklmnopqrstuv18340

      • Пример неправильных выражений: abcdefghijklmnoasdfasdpqrstuv18340

    2. является ли данная строчка GUID с или без скобок. Где GUID это строчка, состоящая из 8, 4, 4, 4, 12 шестнадцатеричных цифр разделенных тире.
      • Пример правильных выражений: {e02fa0e4-01ad-090A-c130-0d05a0008ba0} и e02fd0e4-00fd-090A-ca30-0d00a0038ba0

      • Пример неправильных выражений: 02fa0e4-01ad-090A-c130-0d05a0008ba0} или e02fd0e400fd090Aca300d00a0038ba0

    3. является ли заданная строка правильным MAC-адресом (6 двузначных 16-ричных чисел, разделённых двоеточиями)
      • Пример правильных выражений: 01:32:54:67:89:AB, aE:dC:cA:56:76:54

      • Пример неправильных выражений: 01:33:47:65:89:ab:cd, 01:23:45:67:89:Az

    4. является ли данная строчка валидным URL адресом. решать не надо, в усливиях полная муть -- FrBrGeorge

    5. является ли данная строчка шестнадцатиричным идентификатором цвета в HTML
      • Пример правильных выражений: #FFFFFF, #FF3421, #00ff00

      • Пример неправильных выражений: 232323, f#fddee, #fd2

    6. является ли данная строчка датой в формате dd/mm/yyyy. Начиная с 1600 года до 9999 года

      • Пример правильных выражений: 29/02/2000, 30/04/2003, 01/01/2003

      • Пример неправильных выражений: 29/02/2001, 30-04-2003, 1/1/1899

    7. является ли данная строчка валидным E-mail адресом согласно RFC 2822 (определение адреса — в разделе 3.4.1. Правда же, устроители олимпиады — оптимисты? Давайте хотя бы разберёмся, из каких символов может состоять имя и из каких — домен, и какие бывают ограничения на доменное имя)

      • Пример правильных выражений: mail@mail.ru, valid@megapochta.com, aa@aa.info

      • Пример неправильных выражений: bug@@@com.ru, @val.ru, Just Text2, val@val, val@val.a (строго говоря, два последних примера могут быть правильными, ну да ладно -- FrBrGeorge)

    8. является ли заданная строчка IP адресом, записанным в десятичном виде
      • Пример правильных выражений: 127.0.0.1, 255.255.255.0, 192.168.0.1

      • Пример неправильных выражений: 1300.6.7.8, 1.2.3, 192.168.257.3, 23.34.45.56.78, 1b.24.ef.121

    9. Проверить, надежно ли составлен пароль. Пароль считается надежным, если он состоит из 8 или более символов. Где символом может быть английская буква, цифра и знак подчеркивания. Пароль должен содержать хотя бы одну заглавную букву, одну маленькую букву и одну цифру. {*} придётся применять операцию |

      • Пример правильных выражений: c00l_Pass, SupperPas1, 100_Sobak

      • Пример неправильных выражений: Cool_pass, C00l, c0000lest

    10. является ли заданная строка шестизначным числом, записанным в десятичной системе счисления без нулей в старших разрядах.
      • Пример правильных выражений: 123456, 234567

      • Пример неправильных выражений: 1234567, 12345, 001234

      • r"^[1-9][0-9]{5}$"

  4. (MCCME) Напишите программу, которая посчитает количество смайликов в заданном тексте. Смайликом будем считать последовательность символов, удовлетворяющую условиям:

    • первым символом является либо ; (точка с запятой) либо : (двоеточие) ровно один раз
    • далее может идти символ – (минус) сколько угодно раз (в том числе символ минус может идти ноль раз)
    • в конце обязательно идет некоторое количество (не меньше одной) одинаковых скобок из следующего набора: (, ), [, ].
    • внутри смайлика не может встречаться никаких других символов.
    • Например, нижеприведенные последовательности являются смайликами:
      :)
      ;---------[[[[[[[[
      в то время как эти последовательности смайликами не являются (хотя некоторые из них содержат смайлики):
      :-)]
      ;--
      -)
      ::-(
      :-()

      Формат входных данных:

      • Вводится одна строка текста, которая может содержать маленькие латинские буквы, пробелы, символы, которые могут встречаться в смайликах. Длина строки не превышает 100 000 символов.

      Формат выходных данных:

      • Выведите одно число — количество смайликов, которые встречаются в тексте. Примеры

      Входные данные

      Выходные данные

      :);------[[[[[]

      2

      :-)];----;

      1

      -)(---:---

      0

      hello :-)

      1

    • /!\ Не забывайте, что спецсимволы ([,],*,.,?,+,(,),{,},^,$) в регулярном выражении можно экранировать с помощью \, тогда они становятся просто символами. Например, \* — это просто звёздочка.

    • /!\ Не забывайте использовать т. н. «необработанные строки» (r"…" вместо "…"), чтобы \ не обрабатывался Python, а доставался регулярному выражению.

  5. {*} (использование операции |). Ыцкий язык. Слово ыцкого языка записывается латинскими буквами и может состоять из слогов четырёх видов:

    1. согласная-гласная-согласная

    2. гласная-согласная-согласная

    3. согласная-I (где I — это буква I, гласная)

    4. C-гласная (где C — это буква C, согласная)

      • Ввести слово и проверить, может ли оно принадлежать ыцкому языку.
    5. Написать генератор ыцких и неыцких слов

Условные обозначения


CategoryClass CategoryVmsh

LecturesVMSH/2012-02-15 (последним исправлял пользователь FrBrGeorge 2012-02-23 20:53:26)