C# 用C语言中的正则表达式读取文本文件#

C# 用C语言中的正则表达式读取文本文件#,c#,regex,C#,Regex,您好,我正在应用程序中使用C#读取日志文件(文本文件),我正在使用日期读取日志文件。我还创建了一个Regex格式,用于按日期获取异常 现在我通过使用这个正则表达式格式成功地得到了异常,但是我不能正确地得到异常行。当我要使用下面的正则表达式格式时,例外行的最后一个字母丢失了。告诉我我在这方面做错了什么。任何人都可以告诉我解决方案,以获得完整的例外行 提前谢谢 我的代码是: var matches = Regex.Matches(sb.ToString(), @"(?<date>\d{

您好,我正在应用程序中使用C#读取日志文件(文本文件),我正在使用日期读取日志文件。我还创建了一个Regex格式,用于按日期获取异常

现在我通过使用这个正则表达式格式成功地得到了异常,但是我不能正确地得到异常行。当我要使用下面的正则表达式格式时,例外行的最后一个字母丢失了。告诉我我在这方面做错了什么。任何人都可以告诉我解决方案,以获得完整的例外行

提前谢谢

我的代码是:

 var matches = Regex.Matches(sb.ToString(), @"(?<date>\d{4}\-\d{2}\-\d{2})\s(?<message>(.(?!\d{4}\-\d{2}\-\d{2}))+)");
在我的日志文件中,所有行都以日期开头,但在某些行中,消息太长,因此会出现下一行。因此,我想读取以日期开头的文件意味着我错过了以该消息开头的行…

尝试使用:

 @"(?<date>\d{4}\-\d{2}\-\d{2})\s+(?<message>(.(?!\d{4}\-\d{2}\-\d{2}))+.)"
@“(?\d{4}-\d{2}-\d{2})\s+(?((?!\d{4}-\d{2}))+”

要回答第一个问题,要找到最后一个丢失的字母,只需更改点在图案中的位置:

var matches = Regex.Matches(sb.ToString(), @"(?<date>\d{4}\-\d{2}\-\d{2})\s(?<message>((?!\d{4}\-\d{2}\-\d{2}).)+)");
var matches=Regex.matches(sb.ToString(),@“(?\d{4}-\d{2}-\d{2}”)s(?((?!\d{4}-\d{2}-\d{2})。+);
如果它不是前瞻模式的开始,那么现在将匹配下一个字母。如果前瞻模式不在下一个字符之后,则您的模式与该字符匹配


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

您的文本文件是否有效?如果是这样,您应该使用XmlDocument或XDocument来获取这些数据,而不是正则表达式。在任何情况下,发布一个文本文件的示例对于更好地理解问题都是非常好的。您能展示一个日志的示例吗entry@Karl:键入内容只是命名捕获组,而不是要搜索的文本。但我完全同意,我们需要查看示例输入和输出,以了解出了什么问题。哦,是的,没错@Chris。我没有仔细看。但是一个实际日志文件的示例仍然非常有用file@Omega:谢谢。你的代码运行良好。我得到了它。非常感谢你。你能给我解释一下以上的正则表达式格式吗?我不熟悉这个正则表达式,所以我想知道它。@SuryaKavitha-(1)我将
\s
更改为
s+
-这可能不需要,但它的作用是,日期和消息之间的空格可能是一个或多个空格字符;(2) 最后,我添加了表示任意一个字符的
。因为您使用了负前瞻
(?!…)
,所以您的正则表达式会剪切最后一个字符,因为您匹配的字符后面不跟日期,但消息的最后一个字符后面跟日期,所以您没有将其包括在匹配中。也许更好的办法是不要只有
,而是
,以防邮件后面没有任何内容。谢谢你的代码。你能给我解释一下以上的正则表达式格式吗?我不熟悉这个正则表达式,所以我想知道它。
var matches = Regex.Matches(sb.ToString(), @"(?<date>\d{4}\-\d{2}\-\d{2})\s(?<message>((?!\d{4}\-\d{2}\-\d{2}).)+)");