Это старая версия документа!
Ищет только первое совпадение
match = re.search(regex, string)
Объект Match имеет несколько методов, например group(), который возвращает части строки сгруппированные в скобки, вернет
По умолчанию ищет самый большой кусок, можно ограничить вопросительным знаком, например
line = '<text line> some text>' match = re.search(r'<.*>', line) match.group() --> '<text line> some text>'' line = '<text line> some text>' match = re.search(r'<.*?>', line) match.group() --> '<text line>'
regex+ - одно или более повторений предшествующего элемента regex* - ноль или более повторений предшествующего элемента regex? - ноль или одно повторение предшествующего элемента regex{n} - ровно n повторений предшествующего элемента regex{n,m} - от n до m повторений предшествующего элемента regex{n,} - n или более повторений предшествующего элемента . - любой символ, кроме символа новой строки ^ - начало строки $ - конец строки [abc] - любой символ в скобках [^abc] - любой символ, кроме тех, что в скобках a|b - элемент a или b (regex) - выражение рассматривается как один элемент. Кроме того, подстрока, которая совпала с выражением, запоминается
Удобно когда нужно описать подробно строку но извлечь только ее часть
Заключена в круглые скобки, группы нумеруются слева на право, начинается с единицы
# Обращаться к группам можно по номерам, можно указать несколько номеров match.group(0) match.group(1, 2, 1) # Так тоже можно match[1] # Перечислить все группы match.groups()
Синтаксис (?P<name>regexp)
match.group('name') # Можно получить словарь где ключи - имена групп match.groupdict()
Если выражение нужно сгруппировать для какой то другой цели, например указать повторение, но в результат выводить не нужно, следует указать в такой группе символ ?:
# Первая группа не будет в выводе, скобки только для указания повторов re.search(r'((?:\w{4}\.){2}\w{4}).+vlan (\d+).+port (\S+).+port (\S+)', log)
Значение групп захвата можно подставлять в это же выражение
# Как не именованные re.search(r'(\d+) \1', line) re.search(r'(\d+) \1 \1', line) # Так и именованные re.search(r'(?P<as>\d+) (?P=as)', line)