首页 > 解决方案 > 使用正则表达式 python 提取文本块

问题描述

这是我的文本文件:

YN FILE=“stop.x" DATE=wwepweijfp Life=spfewff FUIL=“keener” CREATED_BY=“xxxxx” 
DY FD=4344334 HSH=OIHF 
DC A_GN=EFEFOK 
DF EFIIEFNFNEE
DF NIFENPEFEF
DF AO EIJHEPFN A0 pjwdwdwd
DF C0 STATICVECTOR 
ZZ ---------------< Fields >--------------------- 
DF A0 VERN FMGL ROJF AO
GS MOB40 99 
GA 4 Y 3 F 00H00M F 
G2 “eiberbnier       " EE 
C0 D56916E65D4500574124B15AD3226746A7F70AD7A3936A550BDB87FC077E9F4C7D36C4E9BFFA7545C4AE8C4173
A0 VDS1000170 34486EF018B1BF89 955486C529989CBC 89BCE463 919BC6E9 C927D0 09BA5356CD7CFFBD 
A0 VDS1000171 1951420D5909073A FF7B6A08E2BDC4AC E9593876 50ABACB9 894A6E 57AA4A23DE6414E0 

我想提取这个块:

在此处输入图像描述

文本的第一行总是以 YN FILE 开头。我想提取所有内容,直到遇到以 A0 开头的新行。

我试过这样:

matchObjj = re.search(r'YN.*\nC0.*\nA0', data, re.DOTALL)

但它也提取了A0换行符中的另一个开头。

标签: python

解决方案


当心,在正则表达式中,*已经很糟糕了。这意味着如果有其他以 开头的行'A0',它将停在最后而不是第一个。所以你应该使用 ungreedy *?。而一组就足以摆脱最初的'A0'. 它可以以:

matchObjj = re.search(r'(YN.*?\n)A0', data, re.DOTALL)
block = matchObjj.group(1)

推荐阅读