все Python 3reпонятие
Группы в паттернах
группы
Расширенные конструкции групп: именованные, не захватывающие, lookahead и lookbehind.
Синтаксис
(?P<name>...) именованная
(?:...) не захватывающая
(?=...) lookahead
(?!...) negative lookahead
(?<=...) lookbehind
Захватывающие скобки меняют то, что отдаёт findall: с одной группой он вернёт её содержимое вместо полного совпадения, поэтому, если скобки нужны только чтобы навесить повторитель, берите (?:...). Просмотры нулевой ширины — они проверяют соседний текст, но не съедают его, и в результат он не попадает. В модуле re lookbehind обязан быть фиксированной длины, так что (?<=ab|cde) просто не скомпилируется.
Примеры
import re
re.search(r'(?P<d>\d+)', 'x42').group('d') # → '42'
re.findall(r'(?:\d+)', '1 2') # → ['1', '2'] без захвата
re.findall(r'\d+(?= руб)', '5 руб 3 кг') # → ['5']
re.findall(r'\d+(?! руб)', '5 руб 3 кг') # → ['3']
re.findall(r'(?<=@)\w+', 'user@host') # → ['host']
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности