C# 从路径字符串中删除尾随字符

C# 从路径字符串中删除尾随字符,c#,regex,C#,Regex,我是regex新手,希望从字符串的末尾删除已知数量的字符。字符串表示一个文件路径,因此我不想使用c:\test\test1\test2,而是要去掉留下c:\test的尾随字符 我遇到的麻烦是反斜杠 我将使用什么类型的正则表达式来执行此操作 有些人在遇到问题时会想“我知道,我会使用正则表达式。” 现在他们有两个问题 由于您处理的是文件路径,因此可以使用类的方法计算结果: string GetPathFirstLevel(string path) { while (Path.GetDirec

我是regex新手,希望从字符串的末尾删除已知数量的字符。字符串表示一个文件路径,因此我不想使用
c:\test\test1\test2
,而是要去掉留下
c:\test
的尾随字符

我遇到的麻烦是反斜杠

我将使用什么类型的正则表达式来执行此操作

有些人在遇到问题时会想“我知道,我会使用正则表达式。”
现在他们有两个问题

由于您处理的是文件路径,因此可以使用类的方法计算结果:

string GetPathFirstLevel(string path)
{
    while (Path.GetDirectoryName(path) != Path.GetPathRoot(path))
    {
        path = Path.GetDirectoryName(path);
    }

    return path;
}
这将返回以下值:

GetPathFirstLevel(@"c:\test\test1\test2")  //  @"c:\test"
GetPathFirstLevel(@"c:\test")              //  @"c:\test"
GetPathFirstLevel(@"c:")                   //  null

注意:我想指出,Regex并不是这项工作最合适的工具,使用File.IO API来检查路径有效性更合适,我将指出@dtb的答案

但是,在不讨论其他方法的优点的情况下,直接回答您的问题时,是这样的:

用于从
C:\Test\Test\Test\Test\Test
中从任何给定路径提取
[Drive]:\RootFolder
的正则表达式字符串为:

"[a-zA-Z]:\\[^\\]+"
[a-zA-Z]为您提供字符范围a-Z或a-Z中的任何单个字符,从而覆盖大写和小写

后跟一个

后跟
\
(\是转义字符,因此必须转义才能使用它-您可以通过在字符前面加一个\so作为前缀来转义字符,将\\-放在您想放的位置上?)

[^\]+表示字符串的剩余部分,包括但不包括
\
的下一个实例或其后的任何字符

此外,如果您愿意,可以通过在字符串前面加上引号外的@符号来使用字符“unescaped”,如下所示:

@"[a-zA-Z]:\[^\]+"

没有什么正则表达式。如果您知道要删除多少字符,只需使用子字符串

//numberOfChars is known...

string result = inputString.Substring(0, inputString.Length - numberOfChars -1);

就我个人而言,我会使用string.split()和Path.directoryseportorchar来确定拆分的对象。

路径解决方案更好,但如果您仍然需要正则表达式(出于学习原因),那么它就在这里

Regex.Replace(@"c:\aaa\bb\c", @"^([^\\]*\\[^\\]*)\\.*", @"$1")
要分解它:

^      // begins with
(      // start capturing what you want to save
[^\\]* // zero or more characters that are _not_ backslash
\\     // followed by a backslash
[^\\]* // again zero or more characters that are _not_ backslash
)      // stop capturing
\\     // a backslash
.*     // followed by anything

然后,
$1
给出捕获值(即与第一个括号中的内容匹配的文本)

正确,但是使用Path类要干净得多。回答得好,我同意这是正确的方法,但是,它没有回答问题,那就是“使用regex我该怎么做”@dtb-我也分享了爱