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... } 解: 非常感谢你的帮助!!! 解决方法
让我将我的评论“转换”成答案,因为现在我看到你可以对正则表达式的表现做些什么.
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); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |