3

我有一个路径,其中有更多文件夹。一些文件夹可以有一个看起来像这样的模式:“1.0.0”或“1.0.0.0”(可以是任何数字,但它们之间有这种格式的点)。

我正在尝试使用与 Regex.Match 一起正常工作的正则表达式,但它不适用于Directory.GetDirectories(path, regexPattern) 我要使用的表达式本身是:@"(\d+)\.(\d+)\.(\d+)(\.\d+)*"

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

4

4 回答 4

6

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

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

Regex reg = new Regex(@"(\d+)\.(\d+)\.(\d+)(\.\d+)*");

var dirs = Directory.GetDirectories(path)
                     .Where(path => reg.IsMatch(path))
                     .ToList();
于 2013-10-21T11:42:49.823 回答
3

Directory.GetDirectories()参数不是正则表达式模式。它是一个 glob,例如“*.xaml”。

你可以这样做:

Directory.GetDirectories(path).Where(x => regex.IsMatch(x))
于 2013-10-21T11:41:46.090 回答
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*")
于 2013-10-21T11:41:56.993 回答
0

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

foreach (var d in Directory.EnumerateDirectories(path))
    if (Regex.IsMatch(d, @"(\d+)\.(\d+)\.(\d+)(\.\d+)*"))
        // d is a match
于 2013-10-21T11:47:40.830 回答