C#Regex匹配目录模式

时间:2014-05-01 14:36:13

标签: c# regex

我想要一个正则表达式来运行Directory.GetAllDirectories() 例如

 Directory.GetDirectories(pathToMonitor, "*.*", SearchOption.AllDirectories)
.Where(path => new Regex(pattern, RegexOptions.IgnoreCase).IsMatch(path))
.ToList();

目录遵循以下模式:

  

[可变数量的目录] \ $ PROJECT $ \ $ TYPE $ \ $ BRANCH $ \ [变量   目录数量]

我想忽略第一组[可变数量的目录],然后是3个目录。我不想在$ BRANCH $目录后面包含任何内容。 $ TYPE $目录必须是" Ft"或" Dev"。

我有以下几乎可以运作的模式......

string pattern = @"\w+\\(Ft|Dev)\\";

不幸的是,该模式也将获取$ BRANCH $文件夹之后的所有文件夹。

具体来说,像这样的文件夹列表:

  • C:\用户\我\桌面\项目\开发\科\
  • C:\用户\我\桌面\项目\开发\科\子\子
  • C:\用户\我\桌面\项目\呎\科\子\子
  • C:\用户\我\桌面\项目\呎\科\
  • C:\用户\我\桌面\项目\ QA \科\
  • C:\用户\我\桌面\项目\ QA \科\子\子

应该在正则表达式后过滤到这个:

  • C:\用户\我\桌面\项目\开发\科
  • C:\用户\我\桌面\项目\呎\科

编辑:清除目录模式上的格式

1 个答案:

答案 0 :(得分:2)

您可以使用此模式执行此操作:

@"\w\\(?:Ft|Dev)\\Branch\\?$"

其中$是字符串结尾的锚点。