首页 > 解决方案 > 正则表达式从文本文件中提取文本块?

问题描述

我需要使用正则表达式从 Python 中的文本文件中提取标题和它们下面的文本块,但我发现这很困难。

我将此PDF转换为文本,使其现在看起来像这样:

图像

到目前为止,我已经能够使用以下正则表达式获取所有数字标题(12.4.5.4、12.4.5.6、13、13.1、13.1.1、13.1.12):

import re

with open('data/single.txt', encoding='UTF-8') as file:

    for line in file:
        headings = re.findall(r'^\d+(?:\.\d+)*\.?', line)
        print(headings)`

我只是不知道如何获得这些标题的措辞部分或它们下面的文本段落。

编辑- 这是文本:

IS EN 60601-1:2006&A1:2013&AC:2014&A12:2014

60601-1 © IEC:2005 60601-1 © IEC:2005

– 337 – – 169 –</p>

12.4.5.4 产生诊断或治疗辐射的其他 ME 设备 适用时,制造商应在风险管理过程中解决与产生诊断或治疗辐射的 ME 设备相关的风险,但诊断 X 射线和放射治疗除外(见 12.4.5.2 和 12.4 .5.3)。

通过检查风险管理文件来检查合规性。

12.4.6 诊断或治疗声压适用时,制造商应在风险管理过程中解决与诊断或治疗声压相关的风险。

通过检查风险管理文件来检查合规性。

13 * 危险情况和故障条件

13.1 特定的危险情况

13.1.1 当应用 4.7 中描述和 13.2 中列出的单一故障条件时,一次一个,ME 设备中不会发生 13.1.2 到 13.1.4(包括)中的任何危险情况。

4.7 中描述了一次任何一个组件的故障,这可能导致危险情况。

13.1.2 不得发生以下危险情况: – 危险中的火焰、熔融金属、有毒或可燃物质的排放

数量;

——外壳变形到不符合 15.3.1 的程度;–

当按 11.1.3 所述测量时,应用部分的温度超过表 24 中确定的允许值;不是应用部件但可能被触摸的 ME 设备部件的温度,在按 11.1.3 所述测量和调整时超过表 23 中的允许值;

– 超过表 22 中确定的“其他组件和材料”的允许值乘以 1.5 - 12.5 °C。绕组限制见表 26、表 27 和表 31。在所有其他情况下,表 22 的允许值适用。

应使用 11.1.3 中描述的方法测量温度。

4.7、8.1 b)、8.7.2 和 13.2.2 中关于火焰、熔融金属或可燃物质排放的单一故障条件不适用于以下部件和组件: – 结构或供电电路限制单一故障中的功耗

条件小于 15 W 或能量耗散小于 900 J。

标签: pythonregextexttext-extraction

解决方案


您可以使用您的模式并在其后匹配一个空格,然后是该行的其余部分。

然后重复匹配以下所有不以标题开头的行。

^\d+(?:\.\d+)* .*(?:\r?\n(?!\d+(?:\.\d+)* ).*)*
  • ^\d+(?:.\d+)* 匹配标题后跟空格的模式
  • .*匹配除换行符以外的任何字符 0+ 次
  • (?:非捕获组
    • \r?\n匹配换行符
    • (?!负前瞻,断言直接向右的不是
      • \d+(?:.\d+)* 标题模式
    • )关闭前瞻
    • .*匹配除换行符以外的任何字符 0+ 次
  • )*关闭非捕获组并重复 0+ 次以匹配所有行

正则表达式演示


推荐阅读