在 JavaScript 中工作的路径上的正则表达式在 .Net 中意外匹配

Unexpected match in .Net for a regex on path that works in JavaScript

CLARIFICATION: I am not asking for a pattern. I am asking why a pattern works in PHP and JavaScript but not in .Net.

我正在尝试从路径获取底层文件夹。该模式在 PHP 和 JavaScript 中有效,但 returns 在 .Net 中出现意外结果。我想了解为什么 .Net returns 使用这种模式 returns 是什么。

给出这条路径:

"c:\level0\level1\level2\filename.ext"

我正在尝试匹配

"level2"

这是我正在使用的模式:(编辑不断去掉斜线,所以这是一张图片:

我希望匹配的内容:

level2

C# 匹配的内容:

c:\level0\level1

为了完整性,这是 RegEx 实例中的模式:

如何为 .Net 指定此模式以匹配底层文件夹?

如果您 have the right security permissions 在文件系统上 运行 您的代码不需要为此使用正则表达式,框架已经通过 FileInfo 包含了您需要的内容:

new FileInfo(@"c:\level0\level1\level2\filename.ext").Directory.Name

如果您无法访问文件系统,您也可以使用 Path.GetDirectoryName(),这比我认为的 Regex 更简单:

string directoryPath = Path.GetDirectoryName(@"c:\level0\level1\level2\filename.ext");

//outputs "c:\level0\level1\level2"

string folder = directoryPath.Split(Path.DirectorySeparatorChar).Last();

Fiddle 两个答案中的后者 here

您也可以只使用 Split 和 linq:

string path = @"c:\level0\level1\level2\filename.ext";
string result = path.Split('\').Reverse().Skip(1).First();
//outputs: level2