我需要使用正则表达式从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)`
我只是不知道如何获得这些标题的措词部分或它们下方的文本段落。
编辑-这是文本:
I.S。 EN 60601-1:2006&A1:2013&AC:2014&A12:2014
60601-1©IEC:2005 60601-1©IEC:2005
– 337 – – 169 –
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中列出应用单故障条件时,一个 在这段时间内,在13.1.2至13.1.4(含)范围内的危险情况均不会发生。 我的设备。
一次任何一个组件的故障可能导致危险的情况,这是 4.7中描述。
13.1.2 不会发生以下危险情况: –散发出危险的火焰,熔融金属,有毒或可燃物质
数量;
–外壳变形到破坏符合15.3.1的程度; –
当以下情况时,应用部件的温度超过表24中所示的允许值 如11.1.3所述进行测量; 不是适用部件但可能很可能是ME设备部件的温度 进行测量并调整为超过表23中的允许值 在11.1.3中描述;–
–超过表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或能量耗散小于900J。
答案 0 :(得分:2)
您可以使用模式并在其后跟该行的其余部分匹配一个空格。
然后重复匹配以下所有非以标题开头的行。
^\d+(?:\.\d+)* .*(?:\r?\n(?!\d+(?:\.\d+)* ).*)*
^\d+(?:.\d+)*
您的模式以匹配标题和后跟空格.*
匹配除换行符0次以上以外的所有字符(?:
非捕获组
\r?\n
换行符(?!
负向查找,断言直接在右边的不是
\d+(?:.\d+)*
标题模式)
提前关闭.*
匹配除换行符0次以上以外的所有字符)*
关闭非捕获组并重复0次以上以匹配所有行答案 1 :(得分:1)
也许
^(\d+(?:\.\d+)*)\s+([\s\S]*?)(?=^\d+(?:\.\d+)*)|^(\d+(?:\.\d+)*)\s+([\s\S]*)
可能有点接近我猜到的那些想要的文本。
在这里,我们只是寻找以开头的行,
^(\d+(?:\.\d+)*)\s+
然后,我们只需使用
([\s\S]*?)
直到下一行,
(?=^\d+(?:\.\d+)*)
然后,取决于输入的外观,我们可能有也可能没有,仅剩最后一个元素,我们将使用最后一个元素进行收集:
^(\d+(?:\.\d+)*)\s+([\s\S]*)
,然后我们将其更改(使用|
)到先前的表达式。
尽管此方法易于编写代码,但由于我们使用环顾四周方法,因此在性能方面相当慢,因此如果可能要考虑时间复杂性,the other answer here会更好。
import re
regex = r"^(\d+(?:\.\d+)*)\s+([\s\S]*?)(?=^\d+(?:\.\d+)*)|^(\d+(?:\.\d+)*)\s+([\s\S]*)"
string = """
I.S. EN 60601-1:2006&A1:2013&AC:2014&A12:2014
60601-1 © IEC:2005
60601-1 © IEC:2005
– 337 –
– 169 –
12.4.5.4 Other ME EQUIPMENT producing diagnostic or therapeutic radiation
When applicable, the MANUFACTURER shall address in the RISK MANAGEMENT PROCESS the
RISKS associated with ME EQUIPMENT producing diagnostic or therapeutic radiation other than
for diagnostic X-rays and radiotherapy (see 12.4.5.2 and 12.4.5.3).
Compliance is checked by inspection of the RISK MANAGEMENT FILE.
12.4.6 Diagnostic or therapeutic acoustic pressure
When applicable, the MANUFACTURER shall address in the RISK MANAGEMENT PROCESS the
RISKS associated with diagnostic or therapeutic acoustic pressure.
Compliance is checked by inspection of the RISK MANAGEMENT FILE.
13 * HAZARDOUS SITUATIONS and fault conditions
13.1 Specific HAZARDOUS SITUATIONS
* General
13.1.1
When applying the SINGLE FAULT CONDITIONS as described in 4.7 and listed in 13.2, one at a
time, none of the HAZARDOUS SITUATIONS in 13.1.2 to 13.1.4 (inclusive) shall occur in the
ME EQUIPMENT.
The failure of any one component at a time, which could result in a HAZARDOUS SITUATION, is
described in 4.7.
* Emissions, deformation of ENCLOSURE or exceeding maximum temperature
13.1.2
The following HAZARDOUS SITUATIONS shall not occur:
– emission of flames, molten metal, poisonous or ignitable substance in hazardous
quantities;
– deformation of ENCLOSURES to such an extent that compliance with 15.3.1 is impaired;
–
temperatures of APPLIED PARTS exceeding the allowed values identified in Table 24 when
measured as described in 11.1.3;
temperatures of ME EQUIPMENT parts that are not APPLIED PARTS but are likely to be
touched, exceeding the allowable values in Table 23 when measured and adjusted as
described in 11.1.3;
–
– exceeding the allowable values for “other components and materials” identified in Table 22
times 1,5 minus 12,5 °C. Limits for windings are found in Table 26, Table 27 and Table 31.
In all other cases, the allowable values of Table 22 apply.
Temperatures shall be measured using the method described in 11.1.3.
The SINGLE FAULT CONDITIONS in 4.7, 8.1 b), 8.7.2 and 13.2.2, with regard to the emission of
flames, molten metal or ignitable substances, shall not be applied to parts and components
where:
– The construction or the supply circuit limits the power dissipation in SINGLE FAULT
CONDITION to less than 15 W or the energy dissipation to less than 900 J.
"""
print(re.findall(regex, string, re.M))
[('12.4.5.4','产生诊断或治疗作用的其他ME设备 辐射\ n如果适用,制造商应在 风险管理过程与我相关的\ n风险 产生诊断或治疗性辐射的设备,除 \ n用于诊断X射线和放射疗法(请参阅12.4.5.2和12.4.5.3)。 \ n \ n通过检查风险管理来检查合规性 FILE。\ n \ n',``,''),('12.4.6','诊断或治疗声学 \ n如果适用,制造商应在 风险管理过程\ n与诊断相关的风险 或治疗声压。 \ n \ n符合性由以下人员检查 检查风险管理文件。\ n \ n',``,''),('13','* 危险情况和故障条件\ n \ n','',''),('13 .1', '特定的危险情况\ n \ n *常规\ n \ n','',''), ('13 .1.1','当将单次故障条件应用于 4.7中描述并在13.2中列出,一次\ n,无 13.1.2至13.1.4(含)的危险情况 应该在\ nME设备中发生。\ n \ n任何一个失败 一次可能导致危险情况的组件是 \ n在4.7中描述。 \ n \ n *发射,外壳变形或 超过最高温度\ n \ n','',''),('','','13 .1.2','The 不会发生以下危险情况:\ n –发射 火焰,熔融金属,有毒或可燃物质 危险\ n \ n数量; \ n \ n –外壳变形到这样的程度 违反15.3.1的程度; \ n– \ n \ n温度 应用零件的数量超过了 如第11.1.3节所述测量时的表24; \ n温度 ME设备零件不是应用零件,但可能 \ n超过表23中允许的值 按照11.1.3中的描述进行测量和调整时; \ n \ n– \ n \ n– 超出“其他组件和材料”的允许值 在表22中确定\ n×1.5减去12.5°C。绕组极限 可在表26,表27和表31中找到。\ n在所有其他情况下, 表22的允许值适用。 \ n \ n温度应为 使用11.1.3中描述的方法进行测量。 \ n \ n单一故障 关于4.7、8.1 b),8.7.2和13.2.2的条件 \火焰,熔融金属或可燃物质的散发, 不得应用于零件\ n其中:\ n– 结构或电源电路限制了功率 单个故障\ n \ n条件下的耗散小于15 W或 能量消耗小于900J。\ n \ n')]
答案 2 :(得分:1)
由于他们提供了详细的答案和有用的解释,我最终将@ The-fourth-bird的代码和@Emma的代码的一部分合并到此正则表达式中,这似乎很好地满足了我的需求。
(^\d+(?:\.\d+)*\s+)((?![a-z])[\s\S].*(?:\r?\n))([\s\S]*?)(?=^\d+(?:\.\d+)*\s+(?![a-z]))
这里是REGEX DEMO。
我想做的就是将(数字标题),(单词标题)和(文本正文)分成用逗号分隔的组,这使我可以使用自定义分隔符将它们分成Excel中的列< strong>),(和其他一些后期处理。
关于此新正则表达式的好处是,它跳过了仅作为引用的编号标题,而不是实际上如下所示的标题: