正则表达式匹配一个单词,而不是其他单词的列表
本文关键字:单词 其他 列表 一个 正则表达式 | 更新日期: 2023-09-27 18:12:00
我正在写一个c#应用程序。
我正试图写一个正则表达式,它将匹配一个字符串对模式如下:
目的是测试字符串是否匹配以下模式:任意字符任意次数,然后是一个句号,然后是bla而不是blo, bli而不是blu,然后是一个句号,然后是一个扩展列表。它还需要不区分大小写。
这是我到目前为止写的
var pattern = string.Format(@".*'.(?i){0}'.(?:ext|ext1|ext2|ext3)", "bla");
它可以很好地查找带有bla的字符串。现在,我希望能够过滤出位于完全相同位置的三个字符串的列表。
我有一个FileInfo项列表
- bla.extbla.ext1bla.ext2blu.extblo.ext1bli.ext2
,我想检索那些匹配上面描述的模式,如下所示:
- bla.extbla.ext1bla.ext2
这些都可以。
- blu.extblo.ext1bli.ext2
。
好吧,我用了另一种方法,检索除了符合以下模式
之外的所有文件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());
我不知道你为什么要用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();
当然,我建议使用一个Regex的实例,而不是使用静态的IsMatch方法,以获得更好的性能,但我要让你自己做