我正在写一个c#应用程序。
我试图编写一个正则字符串,它将字符串与模式匹配:
目标是测试字符串是否与模式匹配:任何字符串任何时间,然后是句点,然后是bla而不是blo,bli或blu,然后是句点,然后是扩展列表。它还需要不区分大小写。
这是我到目前为止所拥有的
var pattern = string.Format(@".*\.(?i){0}\.(?:ext|ext1|ext2|ext3)", "bla");
它适用于使用bla查找字符串。现在,我希望能够在完全相同的位置过滤掉三个字符串的列表。
我有一个FileInfo项目列表
我希望检索那些符合上述模式的人:
没关系。
这些是
。任何想法都会受到赞赏。
答案 0 :(得分:0)
我不确定为什么要使用string.Format()
或(?i)
或(?:ext|ext1|ext2|ext3)
之类的内容使其变得复杂。尝试:
var list = Directory.GetFiles(path).Where(file => Regex.IsMatch(file, @"^.+\.bla\.ext[1-3]*$", RegexOptions.CultureInvariant | RegexOptions.IgnoreCase)).ToList();
当然,我建议使用正则表达式的实例而不是使用静态IsMatch方法来获得更好的performance,但我会让你自己这样做。
答案 1 :(得分:0)
好吧,我是通过检索所有文件而不是那些符合以下模式的文件来反过来的。
var pattern = string.Format(@".*\.(?i)(?:{0})\.(?:ext|ext1|ext2|ext3)", new List<string>() { "bli", "blo", "blu"});
listTmp.AddRange(Directory.GetFiles(myPath))
.Where(f => !new Regex(pattern).IsMatch(f)).ToList());