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

如何无需while循环用正则表达式提取文件名中的abc前缀

解决方法

方案1:正则替换(推荐)

直接通过正则一次性移除文件名末尾所有的X、Y、XY或YX组合,无需循环即可得到abc部分:

string abc = Regex.Replace(fileName, @"(XY|YX|X|Y)*$", "");

提示:请将正则中的X和Y替换为你实际的特定模式字符串。比如若X是"_v\d+"、Y是"_beta",则正则需改为@"(_v\d+_beta|_beta_v\d+|_v\d+|_beta)*$"——务必把长组合(如XY、YX)放在单个X/Y前面,避免将组合拆分为单个匹配。

方案2:单个正则捕获

如果需要用捕获组直接提取abc,可以用分支正则覆盖所有格式场景:

Match match = Regex.Match(fileName, @"^(.*?)(?:XY|YX|X|Y)$|^(.*)$");
string abc = match.Groups[1].Success ? match.Groups[1].Value : match.Groups[2].Value;

这个正则会优先匹配带后缀的文件名(通过捕获组1获取abc),若匹配失败则匹配纯abc格式(通过捕获组2获取abc)。

之前尝试失效的原因

  • 使用(.*)(X|Y)这类正则时,贪婪模式的.*会尽可能多匹配字符,导致abcXY被拆分为abcX(组1)和Y(组2),无法直接得到abc;
  • 正向预查方案仅针对abcXY和abcYX设计,没有覆盖纯abc、abcX、abcY的场景,适用性受限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 19:04:55