Skip to main content
 首页 » 编程设计

c#之使用正则表达式列表查找匹配的目录

2024年01月29日2452php

我有一个 IEnumerable ,我想使用正则表达式数组过滤它以找到潜在的匹配项。我一直在尝试使用 linq 加入我的目录和正则表达式字符串,但似乎无法正确处理。这就是我正在尝试做的...

string[] regexStrings = ... // some regex match code here. 
 
// get all of the directories below some root that match my initial criteria. 
var directories = from d in root.GetDirectories("*", SearchOption.AllDirectories) 
                  where (d.Attributes & (FileAttributes.System | FileAttributes.Hidden)) == 0 
                        && (d.GetDirectories().Where(dd => (dd.Attributes & (FileAttributes.System | FileAttributes.Hidden)) == 0).Count() > 0// has directories 
                            || d.GetFiles().Where(ff => (ff.Attributes & (FileAttributes.Hidden | FileAttributes.System)) == 0).Count() > 0) // has files) 
                  select d; 
 
// filter the list of all directories based on the strings in the regex array 
var filteredDirs = from d in directories 
                   join s in regexStrings on Regex.IsMatch(d.FullName, s)  // compiler doesn't like this line 
                   select d; 

...关于如何让它工作的任何建议?

请您参考如下方法:

如果您只想要匹配所有正则表达式的目录。

var result = directories 
    .Where(d => regexStrings.All(s => Regex.IsMatch(d.FullName, s))); 

如果您只想要匹配至少一个正则表达式的目录。

var result = directories 
    .Where(d => regexStrings.Any(s => Regex.IsMatch(d.FullName, s)));