C# 使用Regex读取CSV数据时如何正确获取Acct字段的14位完整数值
C# 正则读取CSV科学计数法格式字段还原方案
问题本质
你遇到的问题根源并非正则拆分CSV的规则错误,而是CSV导出阶段,源表格工具(如Excel)已经将原本14位的Acct字段转换为科学计数法字符串写入CSV文件,你拆分后拿到的是已经被转换的错误值,仅靠修改正则拆分规则无法直接还原原始数值。
解决方案
方案1:调整CSV导出流程(优先推荐)
导出CSV前将Acct列设置为文本格式,再执行导出操作,此时CSV文件中会直接存储原始14位数字字符串,你现有代码不需要任何修改即可拿到正确值。
方案2:基于现有科学计数法字符串还原
如果无法调整导出流程,可以在拆分字段后对Acct列做数值转换处理,示例代码如下:
var csvlines = File.ReadAllLines(file); Regex CSVParser = new Regex(",(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))"); var csvLinesData = csvlines.Skip(1).Select(l => { var cols = CSVParser.Split(l).ToArray(); // 假设Acct为第二列,索引为1,根据实际列位置调整索引值 string rawAcct = cols[1].Trim().Replace(" ", "").Replace("+", "E+"); if (double.TryParse(rawAcct, out double acctValue)) { // 转换为无小数的完整数字字符串,14位整数在double精度范围内不会丢失精度 cols[1] = acctValue.ToString("F0"); } return cols; }).ToArray();
常见疑问解答
是否可以通过修改Regex规则实现需求?
不可以,正则仅负责完成字符串拆分逻辑,没有数值转换和格式还原的能力,无法将科学计数法格式的字符串还原为原始14位数字。
内容的提问来源于stack exchange,提问作者Akshay Chile
相关产品推荐
相关产品推荐

