Kap*_*apé 5 .net c# regex regex-lookarounds
我正在尝试使用此正则表达式解析 C# 应用程序中的日志条目:(^[0-9]{4}(-[0-9]{2}){2}([^|]+\|){3})(?!\1)对于格式类似于[date (in some format)] |的日志 [等级] | [应用程序名称] | [信息]。
哪里(我认为):
^匹配行的开头(在 regex101 上启用/gm)[0-9]{4}(-[0-9]{2}){2}接下来是日期的开始,例如 2015-03-03([^|]+\|){3})接下来是日期的其余部分、日志级别和应用程序名称 (?!\1)后面跟着的不是新日志条目的开始(应该是消息) 例如,我有以下4 个日志条目(为了清楚起见,用换行符分隔):
2015-03-03 19:30:47.2725|INFO|MyApp|这是一条单行日志消息。 2015-03-03 19:31:29.1209|INFO|MyApp|此日志消息有多个 线与 2015-03-03 里面有一个日期。 2015-03-03 19:32:50.1106|INFO|MyApp|此日志消息有 多行 但只是文本。 2015-03-03 19:33:20.2683|错误|MyApp|此日志消息有多行,但是 还有一些令人困惑的文字,例如 2015-03-03 19:33:20.2683|错误| 哪个应该 仍然是有效的日志消息。
但是当我在regex101上测试它时,正则表达式没有捕获该消息,可能是因为我不明白如何捕获否定前瞻。
.*如果我在正则表达式中
包含:(^[0-9]{4}(-[0-9]{2}){2}([^|]+\|){3}).*(?!\1)它与消息匹配,但仅匹配一行(因为与.换行符不匹配)。
那么如何捕获(多行)消息呢?
您可以使用这个正则表达式:
(^\d{4}(-\d{2}){2}([^|]+\|){3})([\s\S]*?)\n*(?=^\d{4}.*?(?:[^|\n]+\|){3}|\z)
Run Code Online (Sandbox Code Playgroud)
这个正则表达式也应该在 C# 中工作,只需确保使用MULTILINE标志即可。
| 归档时间: |
|
| 查看次数: |
3205 次 |
| 最近记录: |