Регулярные выажения
неплохая методичка, в которой есть практически всё про РВ, о чём говорилось в лекции. Серьёзно, прямо план лекции.
Перевод этого плана с русского на русский:) :
- Что такое РВ?
- Спецсимволы
- Точка
- Набор символов (диаразон)
- Отрицание набора символов
- Повторения
- Звёздочка
- Плюс
- Знак вопроса
- Фигурные скобки
- Скобочные группы (карманы)
- Альтернация
- Экранирование
- Позиционные маркеры
- Каретка
- Доллар
- Дополнительные диапазоны и позиционные маркеры
- Контекстные проверки
- Предпросмотр, негативный предпросмотр
- Пост-просмотр, негативный пост-просмотр
- Флаги
- Поиск без учета регистра
- Глобальный поиск
- Многостроковый поиск
- Жадные vs ленивые повторители
Поиск с заменой
В методичке нет про поиск с заменой sub()
Самоцитаты (back references) — \номер скобочной группы (номер открывающей скобки в целом RE)
Пример: (\w+).*(\1) на текст Matches between zero and unlimited times, as match times
Использование цитат в sub():
sub(r"(\w+).(\w+)", r"\2 — \1 — \1", "---qwerty---")
Ещё почитать
Д/З
- Прочитать и прощёлкать
методичку по regexp-ам
В частности, Match Objects
TODO
<<EJCMC(148, RegexDump, Структура РВ)>> Написать функцию redump(needle, haystack), которая выводит следующую информацию о найденном в строке haystack регулярном выражении needle, и о структуре подстановки
- Если подстрока не найдена, выводится пустая строка
Если подстрока найдена, выводится позиция: подстрока, где «позиция» — это номер символа в строке, начиная с которого была найдена подстрока
Если в регулярном выражении присутствовала группировка с сохранением (попросту скобочки), выводится номер группы/позиция: подстрока для каждой группы
Если в регулярном выражении присутствовали именованные группы, выводится имя группы/позиция: подстрока для каждой группы
Если какая-то группа присутствует в исходном выражении, но не нашла сопоставления (например, была помечена повторителем * и пропущена), она не выводится
1 show(r"(\w)+(@+)?(?P<nonalpha>\W+)--(\w+)", "^_^awww-----foo;_;")
3: awww-----foo 1/6: w 3/7: --- 4/12: foo nonalpha/7: ---
- …