我想过滤具有扩展程序.htm
,.html
,.js
,.css
,.svg
,.png
的文件但排除的文件名称为index.html
,page1.html
。
要按扩展名过滤文件,请使用此正则表达式:\.(htm|html|js|css|svg|png)$
。
但是如何排除名称为index.html
,page1.html
?
答案 0 :(得分:3)
您可以使用negative look-ahead assertion排除文件:
^(?!(index|page1)\.html$).*\.(htm|html|js|css|svg|png)$
答案 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)