Регулярные выражения
- Ручной разбор строки на примере нахождения числа
- Разбор строк: шаблон (pattern) и подстановка (match).
- Регулярное выражение: порядок разбора, правило «левый-длинный»
Методы модуля re: search(), match(), findall()
- Полная спецификация расширенного регулярного выражения:
- [] [^] .
- ^ $
- * ? + {} {,}
- | ()
- Двойная функция (), конструкция (?:)
- Значение символа «\» в строке, в r-строке
- Спецсимволы регулярного выражения в Python,
egrep
Домашнее задание
Прочитать о регулярных выражениях на ВикиУчебнике и в документации по Python
Составить 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" или нет
Условные обозначения
— тема по Linux
— тема повышенной сложности
— теоретическое задание
— тема для самостоятельного изучения