如何解析自定义格式字符串中的文件名与INT文件大小并存入List?
解决自定义格式字符串提取文件名与大小的问题
问题分析
你的自定义格式是Files[file1.jpg[2066654],file2.png[234235],file3.gif[56476788]],核心是要从外层Files[]中解析出多个文件名[大小]结构的项,分别提取带扩展名的文件名和整数类型的文件大小,最终存入可通过属性访问的列表中。你之前的代码存在语法错误(.str.Substring写法错误)且逻辑不完整,未处理多文件项拆分和大小提取。
解决方案
1. 定义数据模型类
首先创建一个类来存储文件名和大小,方便后续通过Filename和Filesize属性访问:
public class FileInfoItem { public string Filename { get; set; } public int Filesize { get; set; } }
2. 字符串解析方案(基础版)
适合格式固定、文件名不含[的场景,通过字符串截取和拆分实现:
string input = "Files[file1.jpg[2066654],file2.png[234235],file3.gif[56476788]]"; // 提取Files[]内部的核心内容 string innerContent = input.Substring("Files[".Length, input.Length - "Files[".Length - 1); // 拆分成单个文件项 string[] fileItems = innerContent.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); List<FileInfoItem> fileList = new List<FileInfoItem>(); foreach (string item in fileItems) { // 找到文件名与大小的分隔符[的位置 int bracketIndex = item.LastIndexOf('['); if (bracketIndex == -1) continue; // 跳过格式异常的项 // 提取文件名 string filename = item.Substring(0, bracketIndex); // 提取并转换文件大小(去掉末尾的]) if (int.TryParse(item.Substring(bracketIndex + 1, item.Length - bracketIndex - 2), out int filesize)) { fileList.Add(new FileInfoItem { Filename = filename, Filesize = filesize }); } } // 调用示例:遍历列表访问属性 foreach (var file in fileList) { Console.WriteLine($"文件名:{file.Filename},大小:{file.Filesize}"); }
3. 正则表达式方案(健壮版)
如果文件名可能包含特殊字符(除[外),正则表达式能更灵活地匹配目标内容:
using System.Text.RegularExpressions; string input = "Files[file1.jpg[2066654],file2.png[234235],file3.gif[56476788]]"; List<FileInfoItem> fileList = new List<FileInfoItem>(); // 正则匹配:捕获文件名(除[外的任意字符)和数字类型的大小 MatchCollection matches = Regex.Matches(input, @"([^\[]+)\[(\d+)\]"); foreach (Match match in matches) { if (match.Groups.Count == 3) { string filename = match.Groups[1].Value; // 尝试转换大小为int,避免格式错误导致崩溃 if (int.TryParse(match.Groups[2].Value, out int filesize)) { fileList.Add(new FileInfoItem { Filename = filename, Filesize = filesize }); } } } // 调用示例 foreach (var file in fileList) { Console.WriteLine($"文件名:{file.Filename},大小:{file.Filesize}"); }
原代码问题说明
你之前的代码存在两处关键问题:
- 语法错误:
str.Substring(...).str.Substring(...)是错误写法,正确链式调用应为str.Substring(...).Substring(...) - 逻辑缺失:仅尝试截取一次字符串,未拆分多个文件项,也没有提取文件大小的逻辑,无法覆盖需求场景
内容的提问来源于stack exchange,提问作者Jonny
相关产品推荐
相关产品推荐

