使用模式查找文件夹名称

时间:2013-10-21 11:38:06

标签: c# regex directory

我有一条路径,其中有更多文件夹。一些文件夹可以有一个如下所示的模式:“1.0.0”或“1.0.0.0”(可以是任何数字,但它们之间采用这种格式的点)。

我正在尝试使用正则表达式,它可以正常使用Regex.Match,但它不能用于Directory.GetDirectories(path, regexPattern) 我想要使​​用的表达式是:@"(\d+)\.(\d+)\.(\d+)(\.\d+)*"

如何使用GetDirectories方法使用该表达式?或者找到我正在搜索的文件夹的其他任何方式?

4 个答案:

答案 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