C#Regex性能非常慢

我是正则表达式主题的新手.我想用以下正则表达式解析日志文件
(?<time>(.*?))[|](?<placeholder4>(.*?))[|](?<source>(.*?))[|](?<level>[1-3])[|](?<message>(.*?))[|][|][|](?<placeholder1>(.*?))[|][|](?<placeholder2>(.*?))[|](?<placeholder3>(.*))

日志行如下所示:

2001.07.13 09:40:20|1|SomeSection|3|====== Some log message::Type: test=sdfsdf|||.\SomeFile.cpp||60|-1

带appr的日志文件3000行需要很长时间才能解析它.你有一些提示来加速表现吗?谢谢…

更新:
我使用正则表达式,因为我使用不同的日志文件,不具有相同的结构,我使用它:

string[] fileContent = File.ReadAllLines(filePath);
Regex pattern = new Regex(LogFormat.GetLineRegex(logFileFormat));

foreach (var line in fileContent)
{
   // Split log line
   Match match = pattern.Match(line);

   string logDate = match.Groups["time"].Value.Trim();
   string logLevel = match.Groups["level"].Value.Trim();
   // And so on...
}

解:
谢谢你的帮助.我用以下结果测试了它:
1.)只添加了RegexOptions.Compiled:
从00:01:10.9611143到00:00:38.8928387
2.)使用Thomas Ayoub正则表达式
从00:00:38.8928387至00:00:06.3839097
3.)使用了WiktorStribiżew正则表达式
从00:00:06.3839097至00:00:03.2150095

非常感谢你的帮助!!!

解决方法

让我将我的评论“转换”成答案,因为现在我看到你可以对正则表达式的表现做些什么.

As I have mentioned above,全部替换.*?使用[^ |] *,以及所有重复[|] [|] [|]和[|] {3}(或类似的,取决于[|]的数量.另外,不要使用嵌套的捕获组,也会影响性能

var logFileFormat = @"(?<time>[^|]*)[|](?<placeholder4>[^|]*)[|](?<source>[^|]*)[|](?<level>[1-3])[|](?<message>[^|]*)[|]{3}(?<placeholder1>[^|]*)[|]{2}(?<placeholder2>[^|]*)[|](?<placeholder3>.*)";

只有最后一个.*可以保持“狂野的”,因为它将抓住剩余的线.

以下是您和我的正则表达式模式在RegexHero的比较.

然后,使用RegexOptions.Compiled:

Regex pattern = new Regex(LogFormat.GetLineRegex(logFileFormat),RegexOptions.Compiled);

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...