我正在尝试在URL的末尾提取字符串。例如:
C:\this\that\ExtractThisString.exe
^^^^^^^^^^^^^^^^^^^^^
我正在尝试从该字符串中获取ExtractThisString.exe
,但它有一个未知数量的\
。我希望它基本上抓住URL并列出最后的内容。
答案 0 :(得分:8)
使用System.IO.Path类的辅助方法。在你的情况下:
string fileName = Path.GetFileName(@"C:\this\that\ExtractThisString.exe");
只是为了好玩,如果你必须自己制作,你应该开始搜索最后Path.DirectorySeparatorChar的索引。 如果这不是字符串中的最后一个字符,那么您可以使用String.Substring
提取该索引后的所有文字。
答案 1 :(得分:3)
要查找指定字符的最后一次出现,请使用
int pos = yourString.LastIndexOf(@"\");
然后提取子字符串
string lastPart = yourString.Substring(pos+1);
修改强> 我在15个月后回顾这个答案,因为我真的错过了问题中的一个关键点。 OP正在尝试提取文件名,而不仅仅是查找给定字符的最后一次出现。因此,虽然我的答案在技术上是正确的,但它并不是最好的,因为.NET框架有一个专门的类来处理文件名和路径。这个类称为Path,您可以找到一种简单而有效的方法来使用Path.GetFileName来实现您的结果,如@Adriano的回答所述。
我还要强调一点,使用Path类中的方法可以获得代码可移植性,因为当不同的操作系统使用不同的目录分隔符char时,类会处理这种情况。
答案 2 :(得分:3)
试试这个
var str = @"C:\this\that\ExtractThisString.exe";
var filename = str.Substring(str.LastIndexOf("\\")+1);
答案 3 :(得分:1)
为所有事情做一次......
public static string FileAndExtension(this string aFilePath) {
return aFilePath.Substring(aFilePath.LastIndexOf("\\") + 1);
}
"C:\\this\\that\\ExtractThisString.exe".FileAndExtension()
OR
public static string EverythingAfterLast(this string aString, string aSeperator) {
return aString.Substring(aString.LastIndexOf(aSeperator) + 1);
}
"C:\\this\\that\\ExtractThisString.exe".EverythingAfterLast("\\")
答案 4 :(得分:1)
string path = @"c:\this\that\extractthisstring.exe";
Console.WriteLine(path.Split('\\').Reverse().First());
答案 5 :(得分:0)
我使用System.IO
string file1 = Path.GetFileName(@"C:\this\that\ExtractThisString.exe");
或者如果你想要没有扩展名
string file2 = Path.GetFileNameWithoutExtension(@"C:\this\that\ExtractThisString.exe");
或仅延伸
string ext = Path.GetExtension(@"C:\this\that\ExtractThisString.exe");