You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取dotnet test结果中第二组Average行的Branch列值?

解决dotnet test表格中提取第二个Average行Branch值的问题

看起来你在处理dotnet test的代码覆盖率输出表格时,混淆了捕获组和匹配结果的概念,同时正则的捕获位置也没对准目标列。我来一步步帮你解决:

1. 先修正正则,捕获Branch列的值

你当前的正则^\| Average *\| (\d+.\d+\%).*$捕获的是Line列(第二列)的内容,但你要的是Branch列(第三列)。调整正则,跳过第二列的内容,捕获第三列:

^\| Average\s*\|\s*\d+\.\d+\%\s*\|\s*(\d+\.\d+\%)\s*\|\s*.*$
  • \s*:匹配任意数量的空格(适配表格里的对齐空格)
  • \.:转义小数点(避免正则里的.匹配任意字符)
  • 捕获组(\d+\.\d+\%):精准匹配Branch列的百分比值

2. 获取第二个匹配结果(而非第二个捕获组)

你的表格有两个独立的表格块,每个块都有一行Average,所以你需要的是第二个匹配到的结果,而不是正则里的第二个捕获组。不同工具的实现方式不同:

用.NET代码处理(C#)

如果是用C#解析输出,可以用Regex.Matches()获取所有匹配,然后取索引为1的结果(因为匹配集合从0开始计数):

var output = File.ReadAllText("test_output.txt");
var regex = new Regex(@"^\| Average\s*\|\s*\d+\.\d+\%\s*\|\s*(\d+\.\d+\%)\s*\|\s*.*$", RegexOptions.Multiline);
var matches = regex.Matches(output);
if (matches.Count >= 2)
{
    string branchCoverage = matches[1].Groups[1].Value;
    Console.WriteLine(branchCoverage); // 输出第二个表格的Average行Branch值
}

用命令行工具(awk,更适合结构化表格)

正则处理表格容易受格式变动影响,用awk处理结构化表格更稳定:

awk '/^\+---------\+-----------\+-----------\+-----------\+$/ {table_count++} table_count == 2 && /^| Average / {print $4}' test_output.txt
  • 每遇到表格的分隔线,table_count加1,标记进入新表格
  • 当table_count == 2(第二个表格),且行包含Average时,打印第4个字段(对应Branch列)

你之前的误区

你提到添加{2}和想获取第二个分组,其实是混淆了两个概念:

  • {2}是正则的量词,用来匹配前面的模式2次,不是获取第二个匹配结果
  • 你需要的是第二个匹配到的行,而不是正则表达式里的第二个捕获组

内容的提问来源于stack exchange,提问作者Vladel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:27:31