Регулярные выражения
неплохая методичка, в которой есть практически всё про РВ, о чём говорилось в лекции. Серьёзно, прямо план лекции.
TODO трюк с составлением нечитаемого РВ из читаемых частей.
Копия плана (примеры и пояснения см. на сайте):
Что такое регулярные выражения?
- Спецсимволы
- Точка
- Набор символов (диапазон)
- Отрицание набора символов
- Повторения
- Звёздочка
- Плюс
- Знак вопроса
- Фигурные скобки
- Скобочные группы (карманы)
- Альтернация
- Экранирование
- Позиционные маркеры
- Каретка
- Доллар
- Дополнительные диапазоны и позиционные маркеры
- Контекстные проверки
- Предпросмотр, негативный предпросмотр
- Пост-просмотр, негативный пост-просмотр
- Флаги
- Поиск без учета регистра
- Многостроковый поиск
Перевод строки как любой символ
Ленивые повторители:
*?, +?, ??, {m, n}?
Опасность ленивых операций: «самый левый самый длинный» на атомарном уровне не работает; вложенные *? — путь в бесконечность
Алчные повторители:
*+, ++, ?+ и {m,n}+
(?>…) — общая конструкция алчной группировки
- Алчные повторители ускоряют разбор и (иногда) упрощают выражение
Особенности Python
Работа функций match() и search()
Результат — последовательность Match Object-ов
Именованные карманы (?P<name>…)
- Удобные инструменты:
split(), особенно с разделителями в карманах
Поиск с заменой
Самоцитаты (back references) — \номер скобочной группы (номер открывающей скобки в целом RE)
Пример: (\w+).*(\1) на текст Matches between zero and unlimited times, as match times
Именованные самоцитаты: (?P<name>…) ⇒ (?P=name)
Условные (
) самоцитаты: (?(id/name)yes-pattern|no-pattern)
В методичке нет про поиск с заменой sub()
Использование цитат в sub():
sub(r"(\w+).(\w+)", r"\2 — \1 — \1", "---qwerty---")
Ещё почитать
Д/З
- Прочитать и прощёлкать
методичку по regexp-ам
В частности, Match Objects
