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

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

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

How to Match Multiline Blocks in Python Using Regular Expressions?

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

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

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).

Цель состоит в том, чтобы захватить два компонента:

  • "некоторый изменяющийся текст"
  • Все строки в верхнем регистре расположены в двух строках под ним (исключая символы новой строки)

Несколько подходов были предприняты безуспешно:

re.compile(r"^>(\w )$$(\n[.$] )^$", re.MULTILINE) # Capture both parts
re.compile(r"([^>][\w\s] )$", re.MULTILINE|re.DOTALL) # Just textlines

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

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

Имейте в виду, что привязываются "^" и "$" не соответствует переводу строки. Следовательно, в многострочном режиме «^» следует за новой строкой, а «$» предшествует новой строке.

Кроме того, помните о различных форматах новой строки. Для текста, который может содержать переводы строк, возвраты каретки или и то, и другое, используйте это более инклюзивное регулярное выражение:

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

Модификатор DOTALL здесь не нужен, поскольку точка уже исключает символы новой строки.

Последний учебник Более>

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

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

Copyright© 2022 湘ICP备2022001581号-3