正则表达式匹配一个单词,而不是其他单词的列表

本文关键字:单词 其他 列表 一个 正则表达式 | 更新日期: 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方法,以获得更好的性能,但我要让你自己做