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

如何基于两个分隔符提取目标字符串片段?C#实现求助

正确实现方法

首先你的代码存在两个关键问题:

  1. Windows路径使用反斜杠\,而非正斜杠/;且C#字符串里反斜杠需要转义为\\。
  2. Split方法传入多字符分隔符时,需要传入字符数组,且直接分割所有反斜杠和点会得到大量零散元素,无法直接提取目标内容。

下面提供三种可行实现方式,优先推荐第一种:

方法一:使用专门的路径处理API(最稳妥)

直接借助.NET提供的System.IO.Path类,这是专门处理路径的工具类,能适配各种路径场景:

using System.IO;

var str = @"C:\Users\source\repos\InitiateService\InitiateService\bin\Debug\net6.0\Microsoft.CodeAnalysis.CSharp.dll";
var target = Path.GetFileNameWithoutExtension(str);
// target 的值即为 "Microsoft.CodeAnalysis.CSharp"

Path.GetFileNameWithoutExtension会自动提取路径中的文件名部分,并移除最后的扩展名(无论扩展名是.dll还是其他格式),简洁可靠。

方法二:手动分割字符串

如果必须用Split手动处理,需要分两步操作:先定位到文件名,再移除扩展名:

var str = @"C:\Users\source\repos\InitiateService\InitiateService\bin\Debug\net6.0\Microsoft.CodeAnalysis.CSharp.dll";
// 第一步:按反斜杠分割,取最后一个元素(带扩展名的文件名)
var fileNameWithExt = str.Split('\\').Last();
// 第二步:按点分割,排除最后一个元素(扩展名),再将剩余部分用点拼接
var target = string.Join(".", fileNameWithExt.Split('.').SkipLast(1));

方法三:正则表达式匹配

通过正则匹配最后一个反斜杠之后、最后一个点之前的内容:

using System.Text.RegularExpressions;

var str = @"C:\Users\source\repos\InitiateService\InitiateService\bin\Debug\net6.0\Microsoft.CodeAnalysis.CSharp.dll";
var match = Regex.Match(str, @"[^\\]+(?=\.dll$)");
var target = match.Success ? match.Value : string.Empty;

注意该方法仅针对.dll扩展名生效,若扩展名变化需修改正则,通用性不如前两种。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 09:15:38