如何解析字符串以匹配c#中的模式

本文关键字:模式 何解析 字符串 | 更新日期: 2023-09-27 18:16:42

我需要为文件路径列表中的每个项目捕获一个子字符串。我正在循环的列表在文件系统中不存在,因此我不能使用Path类。我想从字符串的末尾开始解析,并在到达第一个"/"后停止。我尝试过。substring()和。split(),但这两种方法似乎都没有匹配指定模式或从右向左读取的能力。

示例:Some Directory/Some SubDirectory/SomeFile.pdf

我想捕获"SomeFile.pdf"

如何解析字符串以匹配c#中的模式

您应该使用Path类。

例如:

string path = "Some Directory/Some SubDirectory/SomeFile.pdf";
string fileName = System.IO.Path.GetFileName(path);

编辑:只是为了回答你最初的问题如何"从右向左阅读":

您可以使用String.SubstringString.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);
}