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

保存文件名时移除指定内容的技术求助:截取首个下划线前文本

解决方案:统一提取文件名第一个下划线前的内容

我明白你的问题了——你需要处理两种文件名场景:要么移除_zm后缀,要么只保留第一个下划线之前的内容,而之前的Replace方法只能覆盖第一种情况,没法处理像ak47_fmg_mp这类多下划线的文件名。其实我们可以把这两种需求合并成一个逻辑:提取文件名中第一个下划线之前的部分,这样不管是m14_zm还是ak47_fmg_mp,都能得到你想要的结果。

这里提供两种可靠的实现方法:

方法一:字符串分割法(简单直观)

这种方法直接通过查找第一个下划线的位置来截取内容,不需要依赖正则,代码更易懂:

string filename = nyu_res.filename;
string result;

// 找到第一个下划线的索引位置
int firstUnderscorePos = filename.IndexOf('_');

if (firstUnderscorePos != -1)
{
    // 截取从开头到第一个下划线之前的子串
    result = filename.Substring(0, firstUnderscorePos);
}
else
{
    // 如果文件名中没有下划线,直接保留原文件名
    result = filename;
}

逻辑说明:

  • IndexOf('_')会返回第一个下划线在字符串中的位置,如果没有下划线则返回-1
  • 当存在下划线时,用Substring(0, firstUnderscorePos)截取开头到下划线前的内容;不存在则直接用原文件名

方法二:正则表达式法(灵活通用)

如果你更倾向于用正则,这里给出正确的正则表达式,匹配开头到第一个下划线前的所有字符:

using System.Text.RegularExpressions;

string filename = nyu_res.filename;
string result;

// 正则规则:匹配从开头到第一个下划线之前的所有非下划线字符
Match matchResult = Regex.Match(filename, @"^[^_]+");

if (matchResult.Success)
{
    result = matchResult.Value;
}
else
{
    result = filename;
}

正则规则解释:

  • ^:匹配字符串的起始位置
  • [^_]+:匹配任意不是下划线的字符,至少出现一次(+表示贪婪匹配,直到遇到第一个下划线为止)

这两种方法都能完美覆盖你的需求:

  • 对于m14_zm,会返回m14
  • 对于ak47_fmg_mp,会返回ak47
  • 对于没有下划线的文件名(比如m4a1),会直接返回原文件名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:12:31