Здесь приводится базовая информация о синтаксисе регулярных выражений.

Сочетаемость


Несколько регулярных выражений можно склеивать между собой, чтобы сформировать новые выражения.
Например, если A и B являются регулярными выражениями, тогда AB тоже является регулярным выражением.

В общем случае, если строка p подпадает под шаблон A, а другая строка q подпадает под шаблон B, то строка pq подпадёт под AB. Исключение составляют случаи, когда :
1. A или B содержат условия;
2. в A или B используются пограничные описатели (\b);
3. A и/или B содержат нумерованные группы.

На заметку
Сложные выражения могут быть составлены из более простых. За более подробной информацией о регулярных выражениях можно обратиться к первому изданию книги Mastering Regular Expressions (Джеффри Фридл, русское издание — «Регулярные выражения»), или практически к любой другой книге об устройстве компиляторов.


Введение


Регулярные выражения могут содержать как специальные, так и обычные символы. Обычные символы, например, A, a, 0, уже можно расценивать, как простейшие регулярные выражения — под эти шаблоны подпадают собственно строки, состоящие из этих символов. Если склеить несколько символов, например, в шаблон cat, то под этот шаблон подпадёт строка cat.

Некоторые символы имеют специальное значение и потому называются специальными (пример: |, (). Обычные такие символы либо описывают целый класс обычных символов, либо воздействуют на то, как интерпретируется регулярное выражение.


Специальные символы


Базовые
\Либо экранирует специальные символы, либо указывает на использование специальной последовательности (см. ниже). Помните: в Питоне обратный слеш тоже используется для экранирования в строковых литералах, поэтому зачастую в шаблонах рекомендуется использовать сырые строки (с префиксом r), которые не требуют экранирования.
.По умолчанию описывает любой символ, кроме перевода строки. С флагом DOTALL — также и перевод строки.
^Начало строки. С флагом MULTILINE — начало каждой из строк.
$Завершение строки. С флагом MULTILINE — завершение каждой из строк.
x|yОписывает первое подходящее из указанных выражений x или y. При помощи | можно соединить и более двух выражений.
[]Описывает указанное в скобках множество допустимых символов. Специальные символы внутри множества не работают. Поддерживаются диапазоны, например: [a-z], [Н-Я], [0-8]. Описатели классов символов допускаются, но зависят от режима интерпретации выражения (ASCII, либо LOCALE). Описать символы не входящие в указанное множество можно при помощи ^ после открывающей скобки, например: [^abc], [^\d]. Чтобы включить символ ] во множество, его можно либо указать непосредственно после открывающей скобки, либо экранировать при помощи \.
Специальные последовательности (начинаются с обратного слеша — \)
\numГде num — число (от 1 до 99). Ссылается на группу указанную при помощи её порядкового номера. Под группой с индексом 0 обычно понимается обнаруженная строка в целом.
\AПустая строка в начале строки.
\bПограничная пустая строка (в начале или конце слова). Определение слова может зависеть от текущей локали. Внимание: в диапазонах символизирует возврат на символ (backspace).
\BПустая строка не в начале и не в конце слова (т.е. обычно внутри слова).
\dОписывает десятичную цифру. Для Юникода — это символы категории [Nd], для ASCII и байт — это то же, что и [0-9].
\DНецифровой символ.
\sПробельные символы. Для ASCII — то же, что и [ \t\n\r\f\v], для Юникода включает дополнительные символы, например неразрывный пробел.
\SНепробельные символы.
\wСимволы, которые могут входить в состав слов, включая числа и подчёркивание. Для ASCII и байт — то же, что и [a-zA-Z0-9_].
\WНесловарные символы.
\ZПустая строка в конце строки.
Количественные описатели
*0 и более повторений предшествующего выражения.
+1 и более повторений предшествующего выражения.
?0 или 1 повторение предшествующего выражения.
{x}x (число) повторений предшествующего выражения.
{x,y}От x до y повторений предшествующего выражения. Если опустить x, то предполагается 0; если опустить y, то предполагается неопределённое количество (запятую при этом опускать нельзя).
+py3.11 {x,y}+Притяжательные количественные описатели. Сравните: под a{3,5}aa подпадает aaaaaa (под a{3,5} подходят первые 4 символа), в то время как при использовании a{3,5}+aa соответствие найдено не будет (найдутся пять символов, но за ними не будет aa. x{m,n}+ то же, что и (?>x{m,n}).
*?, +?, ??, {x,y}?Добавление ? к указанным описателям делает их нежадными, т.е. они станут описывать как можно меньшее количество символов. Сравните: под <.+> подпадёт вся строка <x>b<y> , в то время, как под <.+?> — только <x> .
+py3.11 *+, ++, ?+Притяжательные количественные описатели. Сравните: под aa подпадает aaaa (под a подходят первые три символа), в то время как при использовании a+a соответствие найдено не будет (под a подходят все четрые символа, но за ними нет ещё одной a). x*+, x++, x?+ то же что и (?>x*), (?>x+), (?>x?) соответственно.
Группировка
(x)Задаёт группу, в которую должно попасть выражение x, к которой можно обращаться в дальнейшем по индексу — \1 (если группа имеет номер 1).
(?P<name>x)Задаёт группу с именем name, в которую должно попасть выражение x. Групп в дальнейшем можно адресовать как по указанному имени, так и по индексу — (?P=name) или \1 (если группа имеет номер 1).
(?:x)Задаёт группу, в которую должно попасть выражение x, к которой нельзя будет обратиться в дальнейшем ни по индексу, ни по имени.
(?#...)Комментарий. При разборе выражения будет проигнорирован.
Условия
x(?=y)Описывает выражение x только если за ним следует y. Например: маршал (?=Жуков) обнаружит маршал в строке маршал Жуков, но не в маршал Конев.
x(?!y)Описывает выражение x только если за ним не следует y. Например: маршал (?!Жуков) обнаружит маршал в строке маршал Конев, но не в маршал Жуков.
x(?<=y)Описывает выражение y только если ему предшествует x. Например: (?<=маршал) Жуков обнаружит Жуков в строке маршал Жуков, но не в капитан Жуков. Внимание: использование количественных описателей не поддерживается, требуются строки фиксированной длины.
x(?<!y)Описывает выражение y только если ему не предшествует x. Например: (?<!маршал) Жуков обнаружит Жуков в строке капитан Жуков, но не в маршал Жуков. Внимание: использование количественных описателей не поддерживается, требуются строки фиксированной длины.
+py2.4 (?(g)y|n)Если группа g обнаружена, то описывает выражение y, иначе — выражение n. Например: под (?P<is_comrade>товарищ)?(?(is_comrade) и брат|тамбовский волк) подпадают строки товарищ и брат и тамбовский волк.
Управление интерпретацией
(?aiLmsux)Позволяет задать флаги интерпретации всего выражения без передачи параметра flag функциям. Значения символов: a — только ASCII; i — игнорировать регистр; L — использовать локаль; m — многострочный режим; s — точка обозначает любой символ; u — Юникод; x — дозволить описания в выражении.
+py3.6 (?aiLmsux-imsx:...)Позволяет задать флаги интерпретации указанного выражения. После минуса можно указать флаги, которые требуется сбросить. a, L, u — взаимоисключающие,

Флаги интерпретации


+py3.0 re.A, re.ASCIIЕсли установлен, то \w, \W, \b, \B, \d, \D, \s и \S описывают только ASCII символы, а не Юникод. Внимание: для байтовых шаблонов не используется.
re.DEBUGВыводить отладочную информацию о скомпилированном выражении.
re.I, re.IGNORECASEИгнорировать регистр символов. Текущая локаль не влияет на работу, покуда не проставлен re.LOCALE.
re.L, re.LOCALEЕсли установлен, то \w, \W, \b, \B будут ориентироваться на настройки текущей локали. Рассчитан на работу с байтами. В +py3.0 использование не рекомендуется — работа с Юникодом даёт более надёжные результаты.
re.M, re.MULTILINEМногострочный режим. Если установлен, то ^ и $ будут находить начало и конец соответственно для каждой строки, включая переводы строк. В про время как по умолчанию на переводы строк указанные описатели не реагируют.
re.S, re.DOTALLЕсли установлен, то . обозначает любой символ, включая перевод строки.
+py2.0 re.U, re.UNICODEЕсли установлен, то \w, \W, \b, \B, \d, \D, \s и \S описывают символы Юникода. Внимание: для +py3.0 это режим по умолчанию.
re.X, re.VERBOSEДозволяет описания в регулярных выражениях. Благодаря описаниям иногда шаблоны становятся более читаемыми. Описание можно поместить прямо в шаблон, начав его с #, при этом неэкранированные пробелы в шаблоне игнорируются.

    import re

# Компилируем выражение для последующего использования.
# Совместим два флага re.X и re.DEBUG
re_test = re.compile(r'''
(\d{4})\s # год
кот # просто кот
''', re.X | re.DEBUG)

# Строка '2018 кот' соответствует выражению.
# Получим содержимое первой группы (год).
re_test.match('2018 кот').group(1) # 2018

# Строка '2018 год' не соответствует выражению.
re_test.match('2018 год') # None

.
Синонимы поиска: Синтаксис регулярных выражений, named groups, re
В разделе «re (регулярные выражения)»: re.compile re.findall re.fullmatch re.match re.search re.split re.sub
На заметку
У нас есть новостная группа в Telegram. Там же можно обсудить интересующие вопросы. Ссылка в самом низу страницы.