Как получить текст между определенных строк в 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 © Все права защищены 2022

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