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
标志即可。
这篇关于使用正则表达式解析多行日志条目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:使用正则表达式解析多行日志条目
基础教程推荐
猜你喜欢
- 使用 SED 在 XML 标签之间提取值 2022-01-01
- 当键值未知时反序列化 JSON 2022-01-01
- 如何使用OpenXML SDK将Excel转换为CSV? 2022-01-01
- C# - 如何列出发布到 ASPX 页面的变量名称和值 2022-01-01
- 我什么时候应该使用 GC.SuppressFinalize()? 2022-01-01
- 从 VB6 迁移到 .NET/.NET Core 的最佳策略或工具 2022-01-01
- 创建属性设置器委托 2022-01-01
- 覆盖 Json.Net 中的默认原始类型处理 2022-01-01
- C# - 将浮点数转换为整数...并根据余数更改整数 2022-01-01
- Page.OnAppearing 中的 Xamarin.Forms Page.DisplayAlert 2022-01-01