1

嗨,我正在我的应用程序中使用 C# 读取日志文件(文本文件),并且正在使用 dates 读取日志文件。我还创建了一个正则表达式格式,用于按日期获取异常。

现在我通过成功使用此正则表达式格式获得了异常,但我无法正确获取异常行。当我要使用下面的正则表达式格式时,我缺少异常行的最后一个字母。告诉我我在这行做错了什么。谁能告诉我获得例外情况的完整行的解决方案。

提前致谢。

我的代码是:

 var matches = Regex.Matches(sb.ToString(), @"(?<date>\d{4}\-\d{2}\-\d{2})\s(?<message>(.(?!\d{4}\-\d{2}\-\d{2}))+)");

我的 txt 文件看起来像

2012-06-21 04:35:30,177|| [5]|| DEBUG|| GID.AAFramework.Shared.LdapAuthentication.PrincipleImpl||  PrincipleImpl: IsInRole(string role)-  Entered
2012-06-21 04:35:30,177|| [5]|| DEBUG|| GID.AAFramework.Shared.LdapAuthentication.PrincipleImpl||  PrincipleImpl: IsInRole(string role)-  IsInRole(ADMINUSER) 
results : True

在我的日志文件中,所有行都以日期开头,但在某些行中消息太长,所以它来到下一行..所以我想读取以日期开头的文件意味着我错过了以该消息开头的行...

4

2 回答 2

1

尝试使用:

 @"(?<date>\d{4}\-\d{2}\-\d{2})\s+(?<message>(.(?!\d{4}\-\d{2}\-\d{2}))+.)"
于 2012-06-26T13:38:41.283 回答
1

要回答您的第一个问题,获取最后一个丢失的字母,只需更改点在您的模式中的位置:

var matches = Regex.Matches(sb.ToString(), @"(?<date>\d{4}\-\d{2}\-\d{2})\s(?<message>((?!\d{4}\-\d{2}\-\d{2}).)+)");

如果它不是前瞻模式的开始,则现在匹配下一个字母。如果前瞻模式不在该字符之后,则您的模式与下一个字符匹配。

我不确定你在最后一部分添加的关于下一行的问题是什么......

于 2012-06-26T14:26:22.080 回答