如何基于两个分隔符提取目标字符串片段?C#实现求助
正确实现方法
首先你的代码存在两个关键问题:
- Windows路径使用反斜杠
\,而非正斜杠/;且C#字符串里反斜杠需要转义为\\。 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
相关产品推荐
相关产品推荐

