有一段路径,现在想获取子文件夹名称的列表 static void Main(string[] args)
{
string str = @"C:\Users\Administrator\Desktop\新建文件夹\Word批量转换\WordBatchConversion\WordBatchConversion\bin\Debug\Data\测试"; Console.WriteLine(Regex.Match(str, @"((?<=\\)[\w\W]+$)?").ToString() ); Console.WriteLine(Regex.Match(str, @"(?<=\\)[\w\W]+$",RegexOptions.RightToLeft).ToString()); Console.ReadLine();
}
方法一:((?<=\\)[\w\W]+$)? 结果错误,匹配结果是全字符串。
我的理解是 先界于\与$之间,表达式为(?<=\\)[\w\W]+$
然后用?来最小匹配,就是( (?<=\\)[\w\W]+$ )?
哪里错了?
方法二:结果匹配不到任何结果。请高手指点对了,强调一下,我想得到的最终结果是“测试”两个字。
{
string str = @"C:\Users\Administrator\Desktop\新建文件夹\Word批量转换\WordBatchConversion\WordBatchConversion\bin\Debug\Data\测试"; Console.WriteLine(Regex.Match(str, @"((?<=\\)[\w\W]+$)?").ToString() ); Console.WriteLine(Regex.Match(str, @"(?<=\\)[\w\W]+$",RegexOptions.RightToLeft).ToString()); Console.ReadLine();
}
方法一:((?<=\\)[\w\W]+$)? 结果错误,匹配结果是全字符串。
我的理解是 先界于\与$之间,表达式为(?<=\\)[\w\W]+$
然后用?来最小匹配,就是( (?<=\\)[\w\W]+$ )?
哪里错了?
方法二:结果匹配不到任何结果。请高手指点对了,强调一下,我想得到的最终结果是“测试”两个字。
因为[\w\W]+中的\W,它可以匹配'\'斜杠。实际上\w\W互反,[\w\W]将匹配任何字符。
这时表达式可以理解为,找到第一个'\',然后匹配任何字符到行尾。
str.Substring(str.LastIndexOf('\\') + 1);
但是这样还是得不到“测试”。非贪婪不会穷举匹配,找出最小的那个。而是在匹配时,一匹配完就停下,不再继续。这时(?<=\\).+?$就好使了。
我测试方法一方法二结果相同。另外,最后有\也是合法路径,这有个隐患。
[^\\]*$就不好使了,我那方法也不对了。
(?<=\\).+?$(RightToLeft)仍然可用,但会匹配到“测试\”