正则表达式查找多行文本中包含句子的段落

2024-10-01 13:26:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pdf提取文本,看起来像这样

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

标题

副标题

Lorem Ipsum只是印刷的虚拟文本

以及排版业。Lorem Ipsum已被删除

该行业自16世纪以来的标准虚拟文本

副标题

Lorem Ipsum只是印刷和印刷的虚拟文本

排版业。Lorem Ipsum一直是该行业的佼佼者

16世纪以来的标准虚拟文本

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

每行末尾都有一个新行('\n')

我试图用正则表达式找到一个给定的句子,并提取找到它的段落。段落是两个连续新行(\n\n)之间的任何内容。请注意,它必须使用lazy方法来完成

供参考:

  1. 这个句子可以以一行开头,以另一行结尾

  2. 我无法更改给定的文本格式

  3. 要返回的行数是有限的,因此如果在向上或向下10行之后找不到\n\n,则必须在regex关键字之前返回10行,之后返回10行


Tags: 文本标题内容标准pdf句子段落行业
1条回答
网友
1楼 · 发布于 2024-10-01 13:26:26

像这样的事情可能会让你开始:

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参数。并且lookahead将检测2个连续的\n字符

相关问题 更多 >