C#Regex以匹配目录模式

C#Regex以匹配目录模式,c#,regex,C#,Regex,我想在Directory.GetAllDirectories()上运行正则表达式 e、 g Directory.GetDirectories(pathToMonitor, "*.*", SearchOption.AllDirectories) .Where(path => new Regex(pattern, RegexOptions.IgnoreCase).IsMatch(path)) .ToList(); 目录遵循如下模式: Directory.GetDirectories(pa

我想在Directory.GetAllDirectories()上运行正则表达式 e、 g

 Directory.GetDirectories(pathToMonitor, "*.*", SearchOption.AllDirectories)
.Where(path => new Regex(pattern, RegexOptions.IgnoreCase).IsMatch(path))
.ToList();
目录遵循如下模式:

 Directory.GetDirectories(pathToMonitor, "*.*", SearchOption.AllDirectories)
.Where(path => new Regex(pattern, RegexOptions.IgnoreCase).IsMatch(path))
.ToList();
[Variable number of Directory]\$PROJECT$\$TYPE$\$BRANCH$\[Variable 目录数目]

 Directory.GetDirectories(pathToMonitor, "*.*", SearchOption.AllDirectories)
.Where(path => new Regex(pattern, RegexOptions.IgnoreCase).IsMatch(path))
.ToList();
我想忽略第一组[Variable number of Directory],后面正好是3个目录。我不想包括在$BRANCH$目录之后有任何内容的目录。$TYPE$目录必须是“Ft”或“Dev”

 Directory.GetDirectories(pathToMonitor, "*.*", SearchOption.AllDirectories)
.Where(path => new Regex(pattern, RegexOptions.IgnoreCase).IsMatch(path))
.ToList();
我有下面的模式,几乎可以工作

 Directory.GetDirectories(pathToMonitor, "*.*", SearchOption.AllDirectories)
.Where(path => new Regex(pattern, RegexOptions.IgnoreCase).IsMatch(path))
.ToList();
string pattern = @"\w+\\(Ft|Dev)\\";
不幸的是,这种模式也会抓取$BRANCH$文件夹之后的所有文件夹

 Directory.GetDirectories(pathToMonitor, "*.*", SearchOption.AllDirectories)
.Where(path => new Regex(pattern, RegexOptions.IgnoreCase).IsMatch(path))
.ToList();
具体来说,文件夹列表如下所示:

 Directory.GetDirectories(pathToMonitor, "*.*", SearchOption.AllDirectories)
.Where(path => new Regex(pattern, RegexOptions.IgnoreCase).IsMatch(path))
.ToList();
  • C:\Users\Me\Desktop\Project\Dev\Branch\
  • C:\Users\Me\Desktop\Project\Dev\Branch\sub\sub
  • C:\Users\Me\Desktop\Project\Ft\Branch\sub\sub
  • C:\Users\Me\Desktop\Project\Ft\Branch\
  • C:\Users\Me\Desktop\Project\Qa\Branch\
  • C:\Users\Me\Desktop\Project\Qa\Branch\sub\sub
应在正则表达式之后过滤到以下内容:

 Directory.GetDirectories(pathToMonitor, "*.*", SearchOption.AllDirectories)
.Where(path => new Regex(pattern, RegexOptions.IgnoreCase).IsMatch(path))
.ToList();
  • C:\Users\Me\Desktop\Project\Dev\Branch
  • C:\Users\Me\Desktop\Project\Ft\Branch

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

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

 Directory.GetDirectories(pathToMonitor, "*.*", SearchOption.AllDirectories)
.Where(path => new Regex(pattern, RegexOptions.IgnoreCase).IsMatch(path))
.ToList();
@"\w\\(?:Ft|Dev)\\Branch\\?$"

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

在正则表达式末尾添加“^”:@“\w+\(Ft|Dev)\\Branch\\\^”0匹配,当我这样做时。$'抱歉。。。我把“$”和“^”混在一起了。一个表示开始,另一个表示结束。这是有效的:模式=@“\w\\(Ft|Dev)\\\w+\\?$”;谢谢
 Directory.GetDirectories(pathToMonitor, "*.*", SearchOption.AllDirectories)
.Where(path => new Regex(pattern, RegexOptions.IgnoreCase).IsMatch(path))
.ToList();