在目录c#中查找具有匹配模式的文件?

时间:2012-06-05 07:29:51

标签: c# .net regex io

 string fileName = "";

            string sourcePath = @"C:\vish";
            string targetPath = @"C:\SR";

            string sourceFile = System.IO.Path.Combine(sourcePath, fileName);
            string destFile = System.IO.Path.Combine(targetPath, fileName);

            string pattern = @"23456780";
            var matches = Directory.GetFiles(@"c:\vish")
                .Where(path => Regex.Match(path, pattern).Success);

            foreach (string file in matches)
            {
                Console.WriteLine(file); 
                fileName = System.IO.Path.GetFileName(file);
                Console.WriteLine(fileName);
                destFile = System.IO.Path.Combine(targetPath, fileName);
                System.IO.File.Copy(file, destFile, true);

            }

我的上述程序适用于单一模式。

我正在使用上面的程序来查找具有匹配模式的目录中的文件但在我的情况下我有多个模式所以我需要在string pattern变量中传递多个模式作为数组但是我不知道我知道如何在Regex.Match中操纵这些模式。

任何人都可以帮助我吗?

4 个答案:

答案 0 :(得分:9)

您可以在正则表达式中添加 OR

string pattern = @"(23456780|otherpatt)";

答案 1 :(得分:4)

更改

 .Where(path => Regex.Match(path, pattern).Success);

 .Where(path => patterns.Any(pattern => Regex.Match(path, pattern).Success));

其中模式为IEnumerable<string>,例如:

 string[] patterns = { "123", "456", "789" };

如果数组中有超过15个表达式,则可能需要增加缓存大小:

 Regex.CacheSize = Math.Max(Regex.CacheSize, patterns.Length);

有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.cachesize.aspx

答案 2 :(得分:2)

Aleroot的答案是最好的,但是如果你想在你的代码中做到这一点,你也可以这样做:

   string[] patterns = new string[] { "23456780", "anotherpattern"};
        var matches = patterns.SelectMany(pat => Directory.GetFiles(@"c:\vish")
            .Where(path => Regex.Match(path, pat).Success));

答案 3 :(得分:1)

您可以使用最简单的形式

string pattern = @"(23456780|abc|\.doc$)";

这将匹配您选择的模式或具有abc模式的文件或扩展名为.doc的文件

可用于Regex类的模式的参考可以是found here