我有一个文件要使用正则表达式从中提取数据,如下所示:
RID: RSS-130 SERVICE PAGE: 2
REPORTING FOR: 100019912 SSSE INTSERVICE PROC DATE: 15SEP21
ROLLUP FOR: 100076212 SSSE REPORT REPORT DATE: 15SEP21
ENTITY: 1000208212 SSSE
ACQT
PUR
SAME 10SEP21 120 12,263,518 19,48.5
T PUR 120 12,263,518 19,48.5
我编写的用于提取数据的正则表达式:
regex_1 = PROC DATE:\s*(\w+).?* # to get 15SEP21
regex_2 = T PUR\s*([0-9,]*\s*[0-9,]*) # to get the first two elements of the line after T PUR
这是可行的,但在文件中,我有多个记录,就像这个一样,在不同的RID: RSS-130
下,例如RID: RSS-140
,我只想强制提取RID: RSS-130
和ACQT
之后的信息,并在该记录结束时停止,而不继续从任何情况下提取数据。我如何才能做到这一点
预期的产出将是:
[(15SEP21;120;12,263,518)]
仅用于RID: RSS-130
下和ACQT
后的记录
我建议在这里利用tempered greedy token:
见regex demo详细信息:
(?s)
-一个内联的re.S
/re.DOTALL
修饰符PROC DATE:
-文字文本\s*
-零个或多个空格(?P<date>\w+)
-组“日期”:一个或多个单词字符(?:(?!RID:\s+RSS-\d).)*
-任何单个字符,零个或多个,但出现次数尽可能多,不会启动RID:\s+RSS-\d
模式(块启动模式,RID:
,一个或多个空格,RSS-
和一个数字)T PUR
-一个文本字符串\s+
-一个或多个空格(?P<num>\d[.,\d]*)
-组“num”:一个数字,然后是零个或多个逗号、点和数字\s+
-一个或多个数字(?P<val>\d[\d,]*)
-组“val”:一个数字,然后是零个或多个逗号或数字李>请参见Python演示:
如果必须在
ACQT
之后检查T PUR
,请将模式修改为见this regex demo
相关问题 更多 >
编程相关推荐