You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中结合正则表达式实现数组元素的完全匹配过滤?

解决完全匹配删除黑名单项的问题

你的问题核心是把包含匹配改成完全匹配,下面给你几种实用的解决办法:

方法一:直接用完全相等判断(最简洁高效)

不用循环,直接通过LINQ判断当前行是否在黑名单里,这就是严格的完全匹配:

string[] black_list = { "Music", "Voice", "Animal" };

arr = arr.Where(line => !black_list.Contains(line)).ToArray();

如果需要忽略大小写(比如匹配"music"也删除),可以改成:

arr = arr.Where(line => !black_list.Any(item => item.Equals(line, StringComparison.OrdinalIgnoreCase))).ToArray();

方法二:用正则实现完全匹配

如果你一定要用正则的^$来实现行首行尾的完全匹配,记得要对黑名单里的内容做转义(防止特殊字符干扰正则),代码如下:

using System.Text.RegularExpressions;

string[] black_list = { "Music", "Voice", "Animal" };

arr = arr.Where(line => !black_list.Any(item => 
    Regex.IsMatch(line, $"^{Regex.Escape(item)}$")
)).ToArray();

同样,要忽略大小写的话,给Regex.IsMatch加个参数:

Regex.IsMatch(line, $"^{Regex.Escape(item)}$", RegexOptions.IgnoreCase)

为什么原来的代码不行?

你之前用line.Contains(black_list[i])是判断字符串中是否包含子串,所以"Music video"里有"Music"子串就会被删掉;改成完全相等或者正则的^$匹配,就只会删掉和黑名单里内容完全一致的项。

内容的提问来源于stack exchange,提问作者K14M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 06:09:59