You need to enable JavaScript to run this app. 如何不使用正则表达式从指定格式文件名中提取.txt前的目标数字
优惠活动
大模型
产品
解决方案
定价
更多

如何不使用正则表达式从指定格式文件名中提取.txt前的目标数字

无正则实现方案

核心逻辑对齐

把原有正则的匹配规则拆解为直白的字符串处理规则,保证和原逻辑输出100%一致:

  • 仅处理纯文件名部分,忽略文件路径中的下划线、数字干扰
  • 仅识别紧贴扩展名前的最后一个下划线,这个下划线后面的字符串如果是纯数字,就提取这个数字作为结果
  • 所有不满足上述条件的场景,统一返回0

实现步骤

  • 借助.NET内置的Path类方法剥离路径、剥离扩展名,拿到不带后缀的文件名主体,避免手写字符串分割的边界问题
  • 查找文件名主体中最后一个下划线的索引位置,如果找不到下划线,直接返回0
  • 截取最后一个下划线后方的所有子串,尝试把这个子串转换为整数
  • 转换成功就返回这个整数值,转换失败(比如子串带字母、为空)就返回0

参考实现代码

int ExtractIdFromFileName(string fullFileName)
{
    // 剥离路径干扰,只保留纯文件名
    string pureFileName = Path.GetFileName(fullFileName);
    // 剥离文件扩展名,得到不带后缀的文件名主体
    string fileNameWithoutExt = Path.GetFileNameWithoutExtension(pureFileName);

    // 查找文件名主体中最后一个下划线的位置
    int lastUnderscorePos = fileNameWithoutExt.LastIndexOf('_');
    // 不存在下划线时直接返回0,和原正则逻辑对齐
    if (lastUnderscorePos < 0)
        return 0;

    // 截取最后一个下划线后方的候选字符串
    string candidateNumStr = fileNameWithoutExt.Substring(lastUnderscorePos + 1);
    // 尝试转换为整数,转换成功返回数值,否则返回0
    return int.TryParse(candidateNumStr, out int id) ? id : 0;
}

示例验证

对照给定的测试用例逐一校验输出:

  • 输入abc_d1.txt:截取的候选串是d1,转换失败返回0 → 匹配预期
  • 输入abc_d1_2.txt:截取的候选串是2,转换成功返回2 → 匹配预期
  • 输入abc_d1_14.txt:截取的候选串是14,转换成功返回14 → 匹配预期
  • 输入abc_d12_x2_156.txt:截取的候选串是156,转换成功返回156 → 匹配预期

方案优势

  • 无正则引擎的初始化、匹配开销,高频调用场景性能更优
  • 逻辑直白无黑盒,后续调整提取规则时修改成本低
  • 依赖.NET内置的路径处理API,不会出现跨平台的路径分隔符兼容问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.11 09:45:06