使用正则表达式解析多行日志条目

Parse multiline log entries using a regex(使用正则表达式解析多行日志条目)

本文介绍了使用正则表达式解析多行日志条目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用以下正则表达式解析C#应用程序中的日志条目:(^[0-9]{4}(-[0-9]{2}){2}([^|]+|){3})(?!1)for日志格式类似于[日期(以某种格式)]|[级别]|[appname]|[Message]

在哪里(我想):

  • ^匹配行首(在regex101上启用/gm)
  • [0-9]{4}(-[0-9]{2}){2}后跟日期开头,如2015-03-03
  • ([^|]+|){3})后跟剩余日期、日志级别和应用程序名称
  • (?!1)后跟NOT新日志条目的开始(应该是消息)

例如,我有以下4日志条目(为便于说明,用换行符分隔):

2015-03-03 19:30:47.2725|INFO|MyApp|This is a single line log message.

2015-03-03 19:31:29.1209|INFO|MyApp|This log message has multiple
lines with
2015-03-03
a date in it.

2015-03-03 19:32:50.1106|INFO|MyApp|This log message has
multiple lines
but just text only.

2015-03-03 19:33:20.2683|ERROR|MyApp|This log message has multiple lines but
also some confusing text like
2015-03-03 19:33:20.2683|ERROR| which should
still be a valid log message.

但当我在regex101上测试正则表达式时,它没有捕获消息,可能是因为我不了解如何捕获负向先行。

如果我在正则表达式中包含.*(^[0-9]{4}(-[0-9]{2}){2}([^|]+|){3}).*(?!1)它与消息匹配,但只有一行(因为.与换行符不匹配)。

那么我如何捕获(多行)邮件?

推荐答案

您可以使用此正则表达式:

(^d{4}(-d{2}){2}([^|]+|){3})([sS]*?)
*(?=^d{4}.*?(?:[^|
]+|){3}|z)

RegEx Demo

此正则表达式在C#中也应该有效,只需确保使用MULTILINE标志即可。

这篇关于使用正则表达式解析多行日志条目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:使用正则表达式解析多行日志条目

基础教程推荐