C#如何从DataReceivedEventArgs动态数据中提取Total的int值
动态提取Total数值的实现方案
你之前使用Substring的写法失效的核心原因是依赖固定偏移量和硬编码的截取终止字符位置,数值长度、Total后空格数量变化时都会出现提取错误,以下是两种稳定的动态提取方案:
方案1:正则表达式提取(推荐,兼容性最强)
直接匹配Total=前缀后的连续数字,不受前后格式变化影响,C# 实现代码如下:
using System.Text.RegularExpressions; // DataReceived 事件处理逻辑中加入以下代码 Match totalMatch = Regex.Match(e.Data, @"Total=\s*(\d+)"); if (totalMatch.Success) { // 直接拿到转换后的int类型Total值 int totalValue = int.Parse(totalMatch.Groups[1].Value); }
正则规则说明:Total=匹配固定前缀,\s*适配前缀后可能出现的任意数量空格,(\d+)捕获后续所有连续数字,不管数值位数多少都能完整提取。
方案2:字符串分割提取(无需引入正则依赖)
如果不想引入正则命名空间,可以通过字符串拆分匹配键值对实现:
// 按空格拆分整行内容,自动过滤空字符串 var lineSegments = e.Data.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < lineSegments.Length; i++) { if (lineSegments[i] == "Total=" && i + 1 < lineSegments.Length) { if (int.TryParse(lineSegments[i + 1], out int totalValue)) { // 拿到Total数值,可在这里添加后续处理逻辑 break; } } }
两种方案都完全适配数值动态变长的场景,就算后续其他字段出现f字符、fps字段位置调整,也不会影响Total的提取准确率。
内容的提问来源于stack exchange,提问作者Saghar Francis
相关产品推荐
相关产品推荐

