如何通过扩展名过滤带有正则表达式的文件,但是排除了一些文件?

时间:2017-02-25 16:16:38

标签: regex

我想过滤具有扩展程序.htm.html.js.css.svg.png的文件但排除的文件名称为index.htmlpage1.html

要按扩展名过滤文件,请使用此正则表达式:\.(htm|html|js|css|svg|png)$

但是如何排除名称为index.htmlpage1.html

的文件

3 个答案:

答案 0 :(得分:3)

您可以使用negative look-ahead assertion排除文件:

^(?!(index|page1)\.html$).*\.(htm|html|js|css|svg|png)$

DEMO

答案 1 :(得分:1)

使用Regex的替代方法 - 使用Linq。不那么简洁,但......

var includeExtensions = new HashSet<string>(StringComparer.OrdinalIgnoreCase) 
    {".htm", ".html", ".js", ".css", ".svg", ".png", ".txt"};

var excludeNames = new HashSet<string>(StringComparer.OrdinalIgnoreCase) 
    {"index", "page1"};

var fileNames = Directory.EnumerateFiles("c:\\test")
    .Select(f => new {FileName = f, Ext=Path.GetExtension(f), Name=Path.GetFileNameWithoutExtension(f)})
    .Where(f => includeExtensions.Contains(f.Ext))
    .Where(f => !excludeNames.Contains(f.Name))
    .Select(f => f.FileName);

答案 2 :(得分:0)

也许尝试这样的事情:

(?<!index|page1)(.html|.htm|.css|.js|.png|.svg)

请参阅demo