«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как захватывать многострочные текстовые блоки с помощью регулярных выражений?

Как захватывать многострочные текстовые блоки с помощью регулярных выражений?

Опубликовано 3 ноября 2024 г.
Просматривать:297

How to Capture Multiline Text Blocks with Regular Expressions?

Регулярное выражение для сопоставления многострочных текстовых блоков

Сопоставление текста, занимающего несколько строк, может создать проблемы при построении регулярных выражений. Рассмотрим следующий пример текста:

some Varying TEXT

DSJFKDAFJKDAFJDSAKFJADSFLKDLAFKDSAF
[more of the above, ending with a newline]
[yep, there is a variable number of lines here]

(repeat the above a few hundred times)

Цель состоит в том, чтобы захватить два компонента: часть «некоторый изменяющийся ТЕКСТ» и все последующие строки текста в верхнем регистре, за исключением пустой строки.

Неправильные подходы:

Некоторые неправильные подходы к решению этой проблемы включают в себя:

  • Использование привязок ^ и $ для соответствия переводам строк. В многострочном режиме ^ соответствует позициям после новой строки, а $ соответствует позициям, предшествующим новой строке.
  • Использование модификатора DOTALL для сопоставления всего, что не является необходимым, поскольку точка (.) соответствует всему, кроме новой строки.

Решение:

Следующее регулярное выражение правильно фиксирует нужные компоненты:

^(. )\n((?:\n. ) )

Вот разбивка его компонентов:

  • ^ соответствует началу строки.
  • (. ) фиксирует часть «некоторый изменяющийся ТЕКСТ» в группе 1.
  • \n соответствует символу новой строки.
  • ((?:\n. ) ) захватывает все последующие строки текста в верхнем регистре в группу 2. Конструкция группы без захвата ?: предотвращает попадание этих строк захватываются как отдельные группы.
  • Оператор повторения гарантирует наличие хотя бы одной строки текста в верхнем регистре.

Использование:

Чтобы использовать это регулярное выражение в Python, вы можете использовать следующий код:

import re

pattern = re.compile(r"^(. )\n((?:\n. ) )", re.MULTILINE)

Затем вы можете использовать метод match() для поиска совпадений в строке :

match = pattern.match(text)
if match:
    text1 = match.group(1)
    text2 = match.group(2)
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3