我有一条路径,其中有更多文件夹。一些文件夹可以有一个如下所示的模式:“1.0.0”或“1.0.0.0”(可以是任何数字,但它们之间采用这种格式的点)。
我正在尝试使用正则表达式,它可以正常使用Regex.Match,但它不能用于Directory.GetDirectories(path, regexPattern)
我想要使用的表达式是:@"(\d+)\.(\d+)\.(\d+)(\.\d+)*"
如何使用GetDirectories
方法使用该表达式?或者找到我正在搜索的文件夹的其他任何方式?
答案 0 :(得分:6)
目录不使用正则表达式来匹配目录的名称,它使用searchPatern,这是我们在命令提示符(*.*, *.jpg
等)下使用它的常用方法。
您必须获取所有目录,然后应用正则表达式来过滤掉一些目录
Regex reg = new Regex(@"(\d+)\.(\d+)\.(\d+)(\.\d+)*");
var dirs = Directory.GetDirectories(path)
.Where(path => reg.IsMatch(path))
.ToList();
答案 1 :(得分:3)
Directory.GetDirectories()
参数不是正则表达式模式。它是一个类似于“* .xaml”的小球。
你可以这样做:
Directory.GetDirectories(path).Where(x => regex.IsMatch(x))
答案 2 :(得分:0)
你不能在方法中使用正则表达式。第二个参数是SearchOptions类型。如果你想要AllDirectories或TopDirectoryOnly。
http://msdn.microsoft.com/en-us/library/ms143448.aspx
您只需使用以下搜索字词:
Dim myDir As New IO.DirectoryInfo(path)
Dim myFiles As IO.FileInfo() = myDir.GetFiles("1.0.0*")
答案 3 :(得分:0)
与Benoit一样,GetDirectories()
使用简单的命令行通配符,而不是正则表达式。要执行您想要的操作,您需要枚举文件夹名称并使用正则表达式进行测试:
foreach (var d in Directory.EnumerateDirectories(path))
if (Regex.IsMatch(d, @"(\d+)\.(\d+)\.(\d+)(\.\d+)*"))
// d is a match