第1行中多行(多行)上的Python正则表达式

2024-10-01 00:28:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个如下结构的日志(txt文件)

At 2020-07-15 14:05:18 - Markers detected in this frame : 3 | 6 | 
ID :6 out of compartment G2A44

At 2020-07-15 14:05:47 - Markers detected in this frame : 3 | 0 | 9 | 
ID :9 out of compartment G2A13
ID :9 out of compartment G2A45

regex

我需要你的信息

  1. 2020-07-15(第一组)
  2. 14:05:47(第二组)
  3. ID:9(第4组)
  4. G2A13

当我在At 2020-07-15 14:05:47 - Markers detected in this frame : 3 | 0 | 9 |下面只有一行时,所有内容都将被表达式捕获 expr = 'At ([0-9]{4}-[0-9]{2}-[0-9]{2}) ([0-9]{2}:[0-9]{2}:[0-9]{2}) - Markers detected in this frame : ([0-9]{1,} .{1,})\s(ID..[0-9])\sout of compartment ([\w]{4,})'

但是我怎样才能在regex中获得第二行或第三行与相同的组匹配呢

import re
expr = 'At ([0-9]{4}-[0-9]{2}-[0-9]{2}) ([0-9]{2}:[0-9]{2}:[0-9]{2}) - Markers detected in this frame : ([0-9]{1,} .{1,})\s(ID..[0-9])\sout of compartment ([\w]{4,})'
f = 'XX.txt'
file = open(f,'r')
text = file.read()
m = []
m = re.findall(expr,text, re.MULTILINE)
print(m)

Tags: ofinretxtidoutthisframe
1条回答
网友
1楼 · 发布于 2024-10-01 00:28:45

您要求的是解析器。你需要一台状态机

基于标头表达式测试目标行,并存储一些值。如果未通过该测试,则基于下一个表达式测试该行,并对新的匹配项和存储的值进行处理

不要期望一次得到所有的线路。这是一个两阶段的工作

相关问题 更多 >