Regex 从路径目录获取子字符串

Regex 从路径目录获取子字符串,regex,string,path,c#-3.0,Regex,String,Path,C# 3.0,我想要目录路径中的子字符串。 是否有任何查询或正则表达式可以这样做。 我的路径是这样的: E:\\Work\\Taxonomies\\012\\20110826\\20110826_final\\full_entry_point_2011-08-26.xsd 我想要的是 20110826_final\\full_entry_point_2011-08-26.xsd 我想要最后一个“\”的路径,我可以在数组中拆分它,但是我必须组合最后两个值 string[] path = value.Spli

我想要目录路径中的子字符串。 是否有任何查询或正则表达式可以这样做。 我的路径是这样的:

E:\\Work\\Taxonomies\\012\\20110826\\20110826_final\\full_entry_point_2011-08-26.xsd
我想要的是

20110826_final\\full_entry_point_2011-08-26.xsd
我想要最后一个“\”的路径,我可以在数组中拆分它,但是我必须组合最后两个值

string[] path = value.Split('\\');
int length=path.Length;
if(length>1)
{
 string final = string.Concat(path[length-2],"\\", path[length-1]);
}
请在这方面指导我。有没有其他方法来实现它。

因为我不知道C,您可能需要处理“\”的数字,但是,如果您想使用正则表达式:

/(?<=\\\\)[^\\]+\\\\[^\\]+$/
/(?
编辑

这个正则表达式将字符串分为两组。 第一组-第二组之前的所有符号和\n。
第二,所有剩余的符号都是“text”\'text“endofstring”

使用正则表达式进行此搜索操作的另一种方法是在String类上使用LastIndexOf方法,因此:

    static bool TryFindTrailingPart(string path, int numberOfSeparators, out string result)
    {
        var sep = Path.DirectorySeparatorChar;
        var lastSlash = path.Length;
        for(int i = 0; i < numberOfSeparators; i++)
        {
            lastSlash = path.LastIndexOf(sep, lastSlash - 1);
            if(lastSlash < 0)
            {
                result = null;
                return false;
            }
        }

        result = path.Substring(lastSlash + 1);
        return true;
    }
static bool TryFindTrailingPart(字符串路径、整数分隔符、输出字符串结果)
{
var sep=Path.directoryseportorchar;
var lastSlash=路径长度;
for(int i=0;i
尽管此代码比正则表达式长得多,但它确实有一些优点:它比正则表达式方法更灵活(已参数化要搜索的路径分隔符的数量),并且执行速度更快

在紧循环中使用OP的路径表达式运行上述代码大约需要200毫秒,每次迭代10000次

对于相同的迭代次数,使用Dmitry Dovgopoly的答案中给出的正则表达式方法大约需要6890毫秒。将Dmitry的代码转换为使用已编译的正则表达式(不包括编译表达式所需的时间)仍然需要大约3140毫秒


这种方法的速度和灵活性是否超过了源代码长度的增加,这在很大程度上取决于您的特定场景:如果您正在处理(非常!)大量的路径字符串,它可能会很有用。另一方面,如果您只需要“一次性使用”处理路径字符串处理问题的一段代码,正则表达式方法可能更合适。

value.Substring(32)
不适合您吗?我认为他没有固定长度。@Loamhoof
Substring()
从字符串的开头而不是结尾删除。@Loamhoof没错,字符串长度不是固定的。好的,所以他可能从开头就有固定的长度,但仍然不确定。这个结果类似于我将值拆分为“\\”后得到的数组集合。感谢您的努力:).我想知道是否还有其他方法比我刚才提到的更好。正如我所说,我不知道C#,但发现它不会简单地返回字符串有点奇怪,因为这个正则表达式中没有组,而且只可能有一个匹配,我不知道它会返回什么:oOne thing。当文件不在像
'E:\1.txt'
这样的文件夹中时,它的行为不好。在这种情况下,您期望得到什么?它是否能处理您刚才提到的场景。如果可能,请解释正则表达式的含义,以便我将来可以实现我的正则表达式。当您有E:\\1.txt输入时,您希望使用什么字符串?
    static bool TryFindTrailingPart(string path, int numberOfSeparators, out string result)
    {
        var sep = Path.DirectorySeparatorChar;
        var lastSlash = path.Length;
        for(int i = 0; i < numberOfSeparators; i++)
        {
            lastSlash = path.LastIndexOf(sep, lastSlash - 1);
            if(lastSlash < 0)
            {
                result = null;
                return false;
            }
        }

        result = path.Substring(lastSlash + 1);
        return true;
    }