【发布时间】:2011-04-09 12:12:35
【问题描述】:
我有一个 C# 应用程序,它使用搜索功能查找目录中的所有文件,然后将它们显示在列表中。我需要能够根据扩展名过滤文件(可能使用搜索功能)和目录(例如,阻止“测试”或“调试”目录中的任何显示)。
我当前的代码是这样的:
Regex filter = new Regex(@"^docs\(?!debug\)(?'display'.*)\.(txt|rtf)");
String[] filelist = Directory.GetFiles("docs\\", "*", SearchOption.AllDirectories);
foreach ( String file in filelist )
{
Match m = filter.Match(file);
if ( m.Success )
{
listControl.Items.Add(m.Groups["display"]);
}
}
(这有点简化和整合,实际的正则表达式是从从文件中读取的字符串创建的,我在两者之间进行了更多的错误检查。)
我需要能够选择一个部分(通常是相对路径和文件名)用作显示名称,同时忽略具有特定文件夹名称的任何文件作为其路径的一部分。例如,对于这些文件,只有带有 +s 的文件应该匹配:
+ docs\info.txt
- docs\data.dat
- docs\debug\info.txt
+ docs\world\info.txt
+ docs\world\pictures.rtf
- docs\world\debug\symbols.rtf
我的正则表达式适用于其中的大多数,除了我不确定如何使它在最后一个文件上失败。关于如何使这项工作的任何建议?
【问题讨论】:
-
您的正则表达式中似乎仍有拼写错误:您需要转义反斜杠 (`\`) 否则它们会将您的前瞻括号转义为文字括号。