Как получить текст между определенных строк в Python (regex)

Иногда возникает необходимость работать с многострочным текстом в 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, чтобы работать регулярными выражениями над многострочным текстом.


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Unlix © Все права защищены 2023

Копирование материалов с сайта Unlix.ru без указания полной ссылки на источник ЗАПРЕЩЕНО!