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