Python 正则表达式从文本文件中提取文本块?
我需要使用正则表达式从Python中的文本文件中提取标题和标题下的文本块,但我发现这很困难 我将其转换为文本,因此它现在看起来如下所示: 到目前为止,我已经能够使用以下正则表达式获得所有数字标题(12.4.5.4、12.4.5.6、13、13.1、13.1.1、13.1.12):Python 正则表达式从文本文件中提取文本块?,python,regex,text,text-extraction,Python,Regex,Text,Text Extraction,我需要使用正则表达式从Python中的文本文件中提取标题和标题下的文本块,但我发现这很困难 我将其转换为文本,因此它现在看起来如下所示: 到目前为止,我已经能够使用以下正则表达式获得所有数字标题(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 =
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)`
我只是不知道如何得到这些标题的措辞部分或下面的一段文字
编辑-以下是文本:
国际标准EN 60601-1:2006和A1:2013以及AC:2014和A12:2014
60601-1©IEC:2005
60601-1©IEC:2005
-337-
-169-
12.4.5.4产生诊断或治疗辐射的其他医用电气设备
适用时,制造商应在风险管理过程中说明
与医用电气设备产生诊断或治疗辐射相关的风险,而非
诊断X射线和放射治疗(见12.4.5.2和12.4.5.3)
通过检查风险管理文件检查合规性
12.4.6诊断或治疗声压
适用时,制造商应在风险管理过程中说明
与诊断或治疗性声压相关的风险
通过检查风险管理文件检查合规性
13*危险情况和故障条件
13.1特定危险情况
- 一般的
- 排放、外壳变形或超过最高温度
^(\d+(?:\.\d+)*)\s+([\s\S]*?)(?=^\d+(?:\.\d+)*)|^(\d+(?:\.\d+)*)\s+([\s\S]*)
可能有点接近我猜的那些想要的文本
在这里,我们只需寻找以
^(\d+(?:\.\d+)*)\s+
(?=^\d+(?:\.\d+)*)
然后,我们只需使用
([\s\S]*?)
直到下一行开始
^(\d+(?:\.\d+)*)\s+
(?=^\d+(?:\.\d+)*)
然后,我们可能会也可能不会,取决于我们的输入看起来如何,只剩下最后一个元素,我们将使用最后一个元素收集它:
^(\d+(?:\.\d+)*)\s+([\s\S]*)
然后我们将(使用|
)将其更改为先前的表达式
尽管这种方法很容易编码,但由于我们使用了lookarounds,所以它的性能非常慢,所以如果时间复杂度是一个问题的话,它会更好,这很可能是一个问题
试验
输出
[('12.4.5.4','其他医用电气设备产生诊断或治疗效果
辐射\n适用时,制造商应在
风险管理过程\n包含与我相关的风险
产生诊断或治疗辐射的设备,而非
\诊断X射线和放射治疗(见12.4.5.2和12.4.5.3)。
\n\n通过检查风险管理系统来检查是否符合要求
文件。\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中列出,一次一个,无
13.1.2至13.1.4(含)中的危险情况
应发生在\nME设备中。\n\n任何一个设备的故障
一次可能导致危险情况的部件
\未在4.7中描述。\n\n*排放、外壳变形或
超过最高温度\n\n','',('','13.1.2','
不得出现以下危险情况:\n–排放
火焰、熔融金属、有毒或可燃物质
危险性\n\n危险性;\n\n–外壳变形到这种程度
遵守15.3.1的程度受损;\n–\n\n温度
超过中规定的允许值的应用零件数量
表24当按照11.1.3所述进行测量时;\n的温度
医用电气设备部件,非应用部件,但为li
(^\d+(?:\.\d+)*\s+)((?![a-z])[\s\S].*(?:\r?\n))([\s\S]*?)(?=^\d+(?:\.\d+)*\s+(?![a-z]))