如何从日志文件中提取动态变化的Total conversion time统计字符串?
解决方案:用正则提取动态变化的转换时间字符串
我来帮你搞定这个问题——要从日志里提取模式固定但数值动态变化的Total conversion time相关字符串,正则表达式是最适合的工具,它能完美适配数值变化的场景。
先明确目标模式
你的目标字符串格式是:Total conversion time (X element(s))|Y millisecs,其中X和Y是可变数字,我们需要用正则匹配这个固定模式,不管X、Y怎么变都能精准捕获。
现有问题分析
你当前的代码用固定字符串11766 element匹配,只能命中特定数值的情况,显然无法适应动态变化,改用正则就能解决这个局限。
修改后的代码实现
function ReadFileLines() { const AFileName = "D:\\ConverterElements\\bingo.log"; // 读取完整日志内容 const fileContent = aqFile.ReadWholeTextFile(AFileName, aqFile.ctANSI); Log.Message("File entire contents:"); Log.Message(fileContent); // 定义匹配完整目标字符串的正则 const fullMatchRegex = /Total conversion time \(\d+ element\(s\)\)\|\d+ millisecs/; // 执行匹配 const fullMatch = fullMatchRegex.exec(fileContent); if (fullMatch) { const targetString = fullMatch[0]; Log.Checkpoint(`成功提取目标字符串:${targetString}`); // 如果需要单独提取元素数量和耗时,用带捕获组的正则 const detailRegex = /Total conversion time \((\d+) element\(s\)\)\|(\d+) millisecs/; const detailMatch = detailRegex.exec(fileContent); if (detailMatch) { const elementCount = detailMatch[1]; const conversionTimeMs = detailMatch[2]; Log.Message(`提取到细节:元素数量 ${elementCount},转换耗时 ${conversionTimeMs} 毫秒`); } } else { Log.Error("未找到符合格式的总转换时间日志"); } }
正则表达式说明
\d+:匹配一个或多个数字,用来捕获动态变化的元素数量和耗时数值\(和\):因为括号在正则里是特殊字符,所以用反斜杠转义,用来匹配日志里的括号\|:转义竖线字符,匹配日志里的分隔符- 其余部分都是固定文本匹配,保证模式的准确性
效果说明
不管日志里的元素数量和耗时数值怎么变,只要符合Total conversion time (数字 element(s))|数字 millisecs的格式,这段代码都能精准提取完整字符串,还能按需单独获取元素数和耗时数值。
内容的提问来源于stack exchange,提问作者Anwar
相关产品推荐
相关产品推荐

