查找带有模式的文件夹名称
本文关键字:文件夹 模式 查找 | 更新日期: 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