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

如何解析自定义格式字符串中的文件名与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}");
}

原代码问题说明

你之前的代码存在两处关键问题:

  1. 语法错误:str.Substring(...).str.Substring(...)是错误写法,正确链式调用应为str.Substring(...).Substring(...)
  2. 逻辑缺失:仅尝试截取一次字符串,未拆分多个文件项,也没有提取文件大小的逻辑,无法覆盖需求场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 13:54:23