Регулярные выражения
- Что такое шаблоны. Сопоставление строки шаблону. Шаблоны генерации файлов и их недостатки.
Синтаксис базового регулярного выражения. Необработанные строки r"…" Python.
Модуль re: методы split() и findall()
Регулярные выражения в Linux: grep
продолжение следует
Домашнее задание
Прочитать о регулярных выражениях на ВикиУчебнике
В тексте «Анны Карениной» найти 25 самых распространённых слов (словом считается последовательность русских букв)
Использовать re.split() для разбиения текста на слова
Составить 10 регулярных выражений (обратите внимание, что по условиям регулярному выражению сопоставляется вся строка, т. е. в Python можно использовать findall('^РВ$') или match('РВ$') (match всегда начинается с начала строки). См. тексты задач на сайте «Открытый Зеленоградский турнир». Большая часть задач — очень просты, см. решение последней задачи:
- является ли данная строчка строкой "abcdefghijklmnopqrstuv18340" или нет
Пример правильных выражений: abcdefghijklmnopqrstuv18340
Пример неправильных выражений: abcdefghijklmnoasdfasdpqrstuv18340
- является ли данная строчка GUID с или без скобок. Где GUID это строчка, состоящая из 8, 4, 4, 4, 12 шестнадцатеричных цифр разделенных тире.
Пример правильных выражений: {e02fa0e4-01ad-090A-c130-0d05a0008ba0} и e02fd0e4-00fd-090A-ca30-0d00a0038ba0
Пример неправильных выражений: 02fa0e4-01ad-090A-c130-0d05a0008ba0} или e02fd0e400fd090Aca300d00a0038ba0
- является ли заданная строка правильным 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
является ли данная строчка валидным URL адресом. решать не надо, в усливиях полная муть -- FrBrGeorge
- является ли данная строчка шестнадцатиричным идентификатором цвета в HTML
Пример правильных выражений: #FFFFFF, #FF3421, #00ff00
Пример неправильных выражений: 232323, f#fddee, #fd2
является ли данная строчка датой в формате dd/mm/yyyy. Начиная с 1600 года до 9999 года
Пример правильных выражений: 29/02/2000, 30/04/2003, 01/01/2003
Пример неправильных выражений: 29/02/2001, 30-04-2003, 1/1/1899
является ли данная строчка валидным 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)
- является ли заданная строчка 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
Проверить, надежно ли составлен пароль. Пароль считается надежным, если он состоит из 8 или более символов. Где символом может быть английская буква, цифра и знак подчеркивания. Пароль должен содержать хотя бы одну заглавную букву, одну маленькую букву и одну цифру. придётся применять операцию |
Пример правильных выражений: c00l_Pass, SupperPas1, 100_Sobak
Пример неправильных выражений: Cool_pass, C00l, c0000lest
- является ли заданная строка шестизначным числом, записанным в десятичной системе счисления без нулей в старших разрядах.
Пример правильных выражений: 123456, 234567
Пример неправильных выражений: 1234567, 12345, 001234
r"^[1-9][0-9]{5}$"
- является ли данная строчка строкой "abcdefghijklmnopqrstuv18340" или нет
(MCCME) Напишите программу, которая посчитает количество смайликов в заданном тексте. Смайликом будем считать последовательность символов, удовлетворяющую условиям:
- первым символом является либо ; (точка с запятой) либо : (двоеточие) ровно один раз
- далее может идти символ – (минус) сколько угодно раз (в том числе символ минус может идти ноль раз)
- в конце обязательно идет некоторое количество (не меньше одной) одинаковых скобок из следующего набора: (, ), [, ].
- внутри смайлика не может встречаться никаких других символов.
- Например, нижеприведенные последовательности являются смайликами:
:) ;---------[[[[[[[[
в то время как эти последовательности смайликами не являются (хотя некоторые из них содержат смайлики)::-)] ;-- -) ::-( :-()
Формат входных данных:
- Вводится одна строка текста, которая может содержать маленькие латинские буквы, пробелы, символы, которые могут встречаться в смайликах. Длина строки не превышает 100 000 символов.
Формат выходных данных:
Выведите одно число — количество смайликов, которые встречаются в тексте. Примеры
Входные данные
Выходные данные
:);------[[[[[]
2
:-)];----;
1
-)(---:---
0
hello :-)
1
Не забывайте, что спецсимволы ([,],*,.,?,+,(,),{,},^,$) в регулярном выражении можно экранировать с помощью \, тогда они становятся просто символами. Например, \* — это просто звёздочка.
/!\ Не забывайте использовать т. н. «необработанные строки» (r"…" вместо "…"), чтобы \ не обрабатывался Python, а доставался регулярному выражению.
(использование операции |). Ыцкий язык. Слово ыцкого языка записывается латинскими буквами и может состоять из слогов четырёх видов:
согласная-гласная-согласная
гласная-согласная-согласная
согласная-I (где I — это буква I, гласная)
C-гласная (где C — это буква C, согласная)
- Ввести слово и проверить, может ли оно принадлежать ыцкому языку.
- Написать генератор ыцких и неыцких слов
Условные обозначения
— тема по Linux
— необязательная тема
— теоретическое задание
— тема для самостоятельного изучения