Иногда возникает необходимость работать с многострочным текстом в Python. Но по-умолчанию модуль re (регулярных выражений) работает только с одной строкой.
Например у нас есть такой текст в переменной text:
>>> text = \
... '''
... 1111
... 2222
... 3333
... 4444
... 5555
... 6666
... '''
>>>
Допустим, нам нужен весь текст между строками 2222 и 5555. Но если мы попробуем сделать re.search, то получим просто ничего:
>>> re.search(r'2222(.*)5555', text)
>>>
Проблема в том, что по-умолчанию спецсимвол ‘.’ не указывает на перенос строки. Но это просто исправить. На помощь нам приходит re.DOTALL:
>>> match = re.search(r'2222(.*)5555', text, re.DOTALL)
>>> match.group(0)
'3333\n4444'
>>>
То, что нужно! Используйте параметр re.DOTALL, чтобы работать регулярными выражениями над многострочным текстом.