我刚接触正则表达式,想要从字符串末尾裁剪已知数量的字符。该字符串表示文件路径,因此我希望去掉末尾的字符,只留下c:\test。
但是,我遇到了反斜杠的问题。
我应该使用什么样的正则表达式来实现呢?
但是,我遇到了反斜杠的问题。
我应该使用什么样的正则表达式来实现呢?
有些人在面对问题时会想:“我知道,我会使用正则表达式。”
现在他们有两个问题了。
由于你正在处理文件路径,因此可以使用Path类的方法来计算结果:
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
C:\Test\Test\Test\Test
中提取C:\Test
的正则表达式字符串,其中您希望从任何给定路径获取[Drive]:\RootFolder
是:"[a-zA-Z]:\\[^\\]+"
[a-zA-Z]可以匹配a-z或A-Z中的任意单个字符,因此涵盖了大小写。
接下来是一个:
接下来是\
(\是转义字符,因此必须转义才能使用它-您可以通过在其前面加上\来转义字符,因此要放置\,您需要输入\\-有意义吗?)
[^\]+表示字符串的剩余部分,但不包括下一个\
或其后的任何字符。
此外,如果您愿意,在引号外面使用@符号前缀的字符串可以使用未转义的字符,如下所示:
@"[a-zA-Z]:\[^\]+"
不需要正则表达式。如果你知道要删除多少个字符,只需使用子字符串...
//numberOfChars is known...
string result = inputString.Substring(0, inputString.Length - numberOfChars -1);
Path
解决方案更好,但如果您仍然想要正则表达式(出于学习目的),这里是它
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
给出了捕获值(即与第一个括号中的内容匹配的文本)。