我有从服务器检索到的错误日志数据,它的格式如下:
文本文件:
2018-01-09 04:50:25,226 [18] INFO messages starts here line1 \n
line2 above error continued in next line
2018-01-09 04:50:29,226 [18] ERROR messages starts here line1 \n
line2 above error continued in next line
2018-01-09 05:50:29,226 [18] ERROR messages starts here line1 \n
line2 above error continued in next line
我需要检索错误/信息性消息以及日期时间戳。
已经在python中编写了以下代码,并且如果错误消息仅在一行中,则可以正常工作,但是如果在多行中记录了相同的错误,则无法正常工作(在这种情况下,它仅给出一行作为输出,但是如果属于则我需要下一行到相同的错误)。
如果您提供任何解决方案/想法,将很有帮助。
下面是我的代码:
f = open('text.txt', 'r', encoding="Latin-1")
import re
strr=re.findall(r'(\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2})(\,\d{1,3}\s\[\d{1,3}\]\s)(INFO|ERROR)(.*)$', f.read(), re.MULTILINE)
print(strr)
上面的代码给出的输出为:
[(''2018-01-09 04:50:25',',226 [18]','INFO','消息从这里开始
line1'),('2018-01-09 04:50:29',',226 [18]','ERROR','消息开始
这里line1'),('2018-01-09 05:50:25',',226 [18]','ERROR','消息
从这里开始line1')]
正如我期望的那样
[(''2018-01-09 04:50:25',',226 [18]','INFO','消息从此处开始
第2行以上错误在下一行中继续)',('2018-01-09
04:50:29',',226 [18]','ERROR','消息从此处的第1行第2行开始
错误继续在下一行'),('2018-01-09 05:50:29',',226
[18]“,'ERROR','消息从此处开始,第1行,第2行,错误继续
在下一行')]
最佳答案
正则表达式:(\d{4}(?:-\d{2}){2}\s\d{2}(?::\d{2}){2})(,\d+[^\]]+\])\s(INFO|ERROR)\s([\S\s]+?)(?=\r?\n\d{4}(?:-\d{2}){2}|$)
Python代码:
import re
matches = re.findall(r'(\d{4}(?:-\d{2}){2}\s\d{2}(?::\d{2}){2})(,\d+[^\]]+\])\s(INFO|ERROR)\s([\S\s]+?)(?=\r?\n\d{4}(?:-\d{2}){2}|$)', text)
输出:
[('2018-01-09 04:50:25', ',226 [18]', 'INFO', 'messages starts here line1\nline2 above error continued in next line'), ('2018-01-09 04:50:29', ',226 [18]', 'ERROR', 'messages starts here line1\nline2 above error continued in next line'), ('2018-01-09 05:50:29', ',226 [18]', 'ERROR', 'messages starts here line1\nline2 above error continued in next line')]
Code demo
关于python - 检索数据,直到与下一个正则表达式模式匹配为止,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48746812/