【发布时间】:2017-11-19 17:58:25
【问题描述】:
我在下面写的正则表达式模式匹配“FinalFolder”之前的字符串。 如何在匹配正则表达式的字符串之后获取文件夹名称(在本例中为“FinalFolder”)?
编辑:很确定我的正则表达式错了。我的意图是匹配“C:\FolderA\FolderB\FolderC\FolderD\Test 1.0\FolderE\FolderF”,然后找到该文件夹。所以,在这种情况下,我正在寻找的文件夹是“FinalFolder”
[TestMethod]
public void TestRegex()
{
string pattern = @"[A-Za-z:]\\[A-Za-z]{1,}\\[A-Za-z]{1,}\\[A-Za-z0-9]{1,}\\[A-Za-z0-9]{1,}\\[A-Za-z0-9._s]{1,}\\[A-Za-z]{1,}\\[A-Za-z]{1,}";
string textToMatch = @"C:\FolderA\FolderB\FolderC\FolderD\Test 1.0\FolderE\FolderF\FinalFolder\Subfolder\Test.txt";
string[] matches = Regex.Split(textToMatch, pattern);
Console.WriteLine(matches[0]);
}
【问题讨论】:
-
您的正则表达式似乎匹配整个字符串,而不仅仅是“FinalFolder”之前的字符串。
-
模式与字符串不匹配。你找到匹配了吗?
-
我会使用子字符串。像
textToMatch.Substring(textToMatch.IndexOf(matches[0]) + matches[0].Length)这样的东西。一旦你有了那个子字符串,你就可以匹配其中的第一个斜杠。 -
总的来说,我认为 Regex 不适合这项工作,但无论如何。
-
您可以根据对路径的了解有几种方法。如果级别是固定的
^(?:[^\\]*\\){level}(.*)$,如果名称是固定的^(?:[^\\]*\\)*FolderF\\(.*)$,我想这是唯一的办法。