【问题标题】:Regex to find paragraph that contains a sentence in a multi-line text正则表达式在多行文本中查找包含句子的段落
【发布时间】:2023-03-08 12:00:01
【问题描述】:

我有一个像这样的 pdf 提取文本

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

标题

字幕

Lorem Ipsum 只是打印的虚拟文本

和排版行业。 Lorem Ipsum 已经

自 1500 年代以来的行业标准虚拟文本。

字幕

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

排版行业。 Lorem Ipsum 一直是业界的

自 1500 年代以来的标准虚拟文本。

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

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

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

仅供参考:

  1. 句子可以以一行开始,以另一行结束

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

  3. 返回的行数是有限制的,所以如果我在上下10行之后找不到\n\n,我必须返回正则表达式关键字之前的10行和之后的10行

【问题讨论】:

  • 为什么需要使用正则表达式?这听起来不像是一个正则表达式问题。
  • 请详细说明惰性方法是什么意思。
  • 这听起来像是家庭作业/作业 - 是吗?你写了什么代码?
  • 这实际上是我正在研究的自动化。我有一个机器人,它可以提取 pdf 文件的页面,然后解析为一个字符串。之后,我必须在我解析的文本中找到一个句子并返回包含该句子的段落。我的想法是:我首先找到包含我的句子的行,然后在上面和下面附加行,直到找到一个空行(只有一个 \n)
  • 所以,我必须使用正则表达式来查找文本中的句子。问题之一是我的句子可以以一行开头,以另一行结尾,所以我无法逐行搜索它,它一定比那更复杂

标签: python regex pdftotext


【解决方案1】:

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

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 字符的前瞻...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    • 2023-01-27
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 2017-05-09
    • 2017-12-24
    相关资源
    最近更新 更多