Regex для поиска абзаца, содержащего предложение в многострочном тексте - PullRequest
0 голосов
/ 25 мая 2020

У меня есть текст извлечения PDF, который выглядит следующим образом

================================= =========

TITLE

subtitle

Lorem Ipsum - это просто фиктивный текст печати

и наборное дело. Lorem Ipsum был

стандартным фиктивным текстом в отрасли с 1500-х годов.

подзаголовок

Lorem Ipsum - это просто фиктивный текст для печати и

наборная индустрия. Lorem Ipsum был

стандартным фиктивным текстом в отрасли с 1500-х годов.

======================== ================

в конце каждой строки появляется новая строка ('\ n').

Я пытаюсь найти данное предложение с помощью регулярного выражения и извлечь абзац, в котором оно было найдено. Абзац - это что-либо между двумя последовательными новыми строками (\ n \ n). Обратите внимание, что это нужно делать ленивым методом.

FYI:

1 - Предложение может начинаться одной строкой и заканчиваться другой

2 - Я не могу изменить заданный текстовый формат

3 - Существует ограничение на количество возвращаемых строк, поэтому, если я не могу найти \ n \ n после 10 строк вверх или вниз, я должен вернуть 10 строк до и 10 строк после ключевого слова регулярного выражения

1 Ответ

0 голосов
/ 04 июня 2020

может помочь вам начать что-то вроде этого:

import re

data = """
ggg

aaa aaa aaa
more bla...

========================================

TITLE

subtitle

Lorem Ipsum is simply dummy text of the printing

and typesetting industry. Lorem Ipsum has been

the industry's standard dummy text ever since the 1500s.

subtitle

Lorem Ipsum is simply more bla of the printing and

typesetting industry. Lorem Ipsum has been the industry's

standard dummy text ever since the 1500s.

========================================

bla bla bla bla bla
more bla...

yet more bla
"""

if __name__ == "__main__":
    to_search = "more bla"
    print(re.findall(r"(?:(?<!^\n)\n(?!^\n)|[^\n])*"+re.escape(to_search)+r"(?:(?<!^\n)\n(?!^\n)|[^\n])*", data, re.DOTALL|re.MULTILINE|re.IGNORECASE))

важны параметры DOTALL и MULTILINE для сопоставления символов новой строки и поиска по строкам. а также предварительные просмотры для обнаружения 2 последовательных \ n символов ...

...