如何解析字符串以匹配c#中的模式
本文关键字:模式 何解析 字符串 | 更新日期: 2023-09-27 18:16:42
我需要为文件路径列表中的每个项目捕获一个子字符串。我正在循环的列表在文件系统中不存在,因此我不能使用Path类。我想从字符串的末尾开始解析,并在到达第一个"/"后停止。我尝试过。substring()和。split(),但这两种方法似乎都没有匹配指定模式或从右向左读取的能力。
示例:Some Directory/Some SubDirectory/SomeFile.pdf
我想捕获"SomeFile.pdf"
您应该使用Path
类。
string path = "Some Directory/Some SubDirectory/SomeFile.pdf";
string fileName = System.IO.Path.GetFileName(path);
编辑:只是为了回答你最初的问题如何"从右向左阅读":
您可以使用String.Substring
与String.LastIndexOf
:
string fileName = path.Substring(path.LastIndexOf("/") + 1);
(但是,如果使用路径,则使用Path
类)
Path.GetFileName(path)
使用Path类是最简单、最正确、最安全的方法。但是,如果您想从字符串的末尾或从右到左解析,一种方法是将字符串反转并解析它。
反转字符串,搜索"/",得到子字符串,反转子字符串,你就得到了你要找的。
示例:使用您的路径调用GetFileNameFromPath方法,它将打印SomeFile.pdf。
using System;
public class Test
{
public static void Main()
{
string path = "Some Directory/Some SubDirectory/SomeFile.pdf";
string fileName = GetFileNameFromPath(path);
Console.WriteLine(fileName);
}
public static string GetFileNameFromPath(string path)
{
string fileName = string.Empty;
path = path.ReverseString();
fileName = path.Substring(0, path.IndexOf(@"/"));
fileName = fileName.ReverseString();
return fileName;
}
}
public static class StringExtension
{
public static string ReverseString(this string s)
{
char[] arr = s.ToCharArray();
Array.Reverse(arr);
return new string(arr);
}
}
如果你把它当作文件/文件夹信息,使用Path是最好的,但是如果你把它当作一个字符串,你只是碰巧想在'/'处分割,那么你可以分割然后反向:
string str = "Some Directory/Some SubDirectory/SomeFile.pdf";
string[] terms = str.Split('/');
Array.Reverse(terms);
foreach (string term in terms)
{
Console.WriteLine(term);
}