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