查找文件与目录C#匹配模式?(Find files with matching patterns i

2019-09-17 18:56发布

 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那些图案。

谁能帮我?

Answer 1:

你可以把一个 正则表达式

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


Answer 2:

更改

 .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以获取更多信息。



Answer 3:

Aleroot的回答是最好的,但如果你想要做它在你的代码,你也可以做这样的:

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


Answer 4:

在最简单的形式,你可以做例子

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

这将匹配蒙山您choosen特征码文件或与ABC模型中的文件或扩展名为.doc文件

一种适用于正则表达式类的图案的参考可以在这里找到



文章来源: Find files with matching patterns in a directory c#?
标签: c# .net regex io