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
标志即可。
这篇关于使用正则表达式解析多行日志条目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:使用正则表达式解析多行日志条目


猜你喜欢
- 使用 rss + c# 2022-01-01
- CanBeNull和ReSharper-将其用于异步任务? 2022-01-01
- 在 LINQ to SQL 中使用 contains() 2022-01-01
- Windows 喜欢在 LINUX 中使用 MONO 进行服务开发? 2022-01-01
- C# 通过连接字符串检索正确的 DbConnection 对象 2022-01-01
- 是否可以在 .Net 3.5 中进行通用控件? 2022-01-01
- 带问号的 nvarchar 列结果 2022-01-01
- Azure Active Directory 与 MVC,客户端和资源标识同一 2022-01-01
- 在 C# 中异步处理项目队列 2022-01-01
- 为什么 C# 中的堆栈大小正好是 1 MB? 2022-01-01