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

.NET 4.7.1下忽略大小写过滤敏感词并保留原文本大小写的实现

.NET 4.7.1下实现忽略大小写的敏感词过滤(保留原文本格式)

由于.NET 4.7.1的string.Replace不支持忽略大小写的重载,我们可以通过正则表达式+自定义替换逻辑实现需求:既忽略大小写匹配敏感词,又保留原文本的格式(仅将敏感词替换为等长*)。

核心实现思路

  1. 对敏感词进行正则转义,避免因敏感词包含正则元字符(如.、*)导致匹配异常;
  2. 使用RegexOptions.IgnoreCase开启忽略大小写匹配;
  3. 通过MatchEvaluator自定义替换规则:将每个匹配到的敏感词片段替换为对应长度的*,其他文本完全保留原格式。

完整代码实现

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;

public class SensitiveWordFilter
{
    public static string Filter(string text, IEnumerable<string> badWords)
    {
        // 边界判断:空文本或无敏感词直接返回原内容
        if (string.IsNullOrEmpty(text) || badWords == null || !badWords.Any())
            return text;

        // 转义每个敏感词的正则特殊字符
        var escapedBadWords = badWords.Select(word => Regex.Escape(word));
        // 构建匹配任意敏感词的正则模式
        var regexPattern = string.Join("|", escapedBadWords);
        // 初始化正则实例,开启忽略大小写
        var regex = new Regex(regexPattern, RegexOptions.IgnoreCase);

        // 执行替换:每个匹配项替换为等长的*
        return regex.Replace(text, match => new string('*', match.Length));
    }
}

测试示例

// 测试数据
var badwords = new[] { "home" };
var text = "Home, hhhome HOME, HOme Hhome1212, H o M e";

// 执行过滤
var filteredText = SensitiveWordFilter.Filter(text, badwords);

// 输出结果:****, hh**** ****, **** H****1212, *******
Console.WriteLine(filteredText);

关键说明

  • 正则转义:Regex.Escape确保敏感词中的特殊字符(如home.)被当作普通文本匹配,不会触发正则逻辑;
  • 保留格式:仅替换匹配到的敏感词片段,原文本的空格、标点、非敏感词的大小写完全保留;
  • 性能优化:正则实例可根据需求缓存(如敏感词列表固定时),避免重复构建正则对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:55:12