查找带有模式的文件夹名称

本文关键字:文件夹 模式 查找 | 更新日期: 2023-09-27 18:36:09

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

我正在尝试使用适用于正则表达式的正则表达式,但它不适用于Directory.GetDirectories(path, regexPattern)我想使用的表达式本身是:@"('d+)'.('d+)'.('d+)('.'d+)*"

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

查找带有模式的文件夹名称

目录不使用正则表达式来匹配目录的名称,它使用搜索Patern,这是我们在命令提示符下使用它的常见方式(*.*, *.jpg等)。

您必须获取所有目录,然后应用正则表达式以过滤掉一些目录

Regex reg = new Regex(@"('d+)'.('d+)'.('d+)('.'d+)*");
var dirs = Directory.GetDirectories(path)
                     .Where(path => reg.IsMatch(path))
                     .ToList();

Directory.GetDirectories()参数不是正则表达式模式。这是一个球体,就像"*.xaml"一样。

您可以改为这样做:

Directory.GetDirectories(path).Where(x => regex.IsMatch(x))

您不能在方法中使用正则表达式。第二个参数的类型为"搜索选项"。如果你想要 AllDirectory 或 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*")

就像Benoit说的,GetDirectories()使用简单的命令行通配符,而不是正则表达式。要执行所需的操作,您需要枚举文件夹名称并使用正则表达式对其进行测试:

foreach (var d in Directory.EnumerateDirectories(path))
    if (Regex.IsMatch(d, @"('d+)'.('d+)'.('d+)('.'d+)*"))
        // d is a match