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

C#实现不区分大小写的Regex.Replace字典文本替换

不区分大小写替换方括号占位符的解决方案

核心问题在于直接使用Regex.Replace加IgnoreCase选项时,无法关联字典中大小写固定的键。正确的做法是利用MatchEvaluator委托,在匹配到占位符后,统一转换为字典键的大小写格式(比如全小写),再从字典中取值替换。

实现步骤

  • 定义匹配方括号占位符的正则表达式:\[([^\]]+)\],匹配[]包裹的任意内容
  • 启用RegexOptions.IgnoreCase确保匹配任意大小写的占位符
  • 通过MatchEvaluator处理每个匹配结果:提取占位符内容,转换为与字典键一致的大小写(比如全小写),再从字典中获取对应值替换

代码示例(C#)

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

class Program
{
    static void Main()
    {
        string template = "My name is [NAME] and I'm [Age] years old";
        Dictionary<string, string> replacements = new Dictionary<string, string>
        {
            {"name", "Alice"},
            {"age", "30"}
        };

        // 正则匹配方括号内的内容,忽略大小写
        string result = Regex.Replace(
            template,
            @"\[([^\]]+)\]",
            match => 
            {
                // 将匹配到的占位符内容转小写,匹配字典键
                string key = match.Groups[1].Value.ToLower();
                // 存在则替换,不存在保留原占位符
                return replacements.TryGetValue(key, out string value) ? value : match.Value;
            },
            RegexOptions.IgnoreCase
        );

        Console.WriteLine(result);
        // 输出: My name is Alice and I'm 30 years old
    }
}

关键说明

  • 正则表达式\[([^\]]+)\]:\[和\]转义匹配方括号,([^\]]+)捕获括号内的非右括号内容作为分组
  • RegexOptions.IgnoreCase让正则忽略占位符的大小写(比如匹配[NAME]、[Name]、[name])
  • MatchEvaluator委托中,通过ToLower()将捕获的占位符内容转换为字典键的大小写(如果字典键是全大写则用ToUpper()),再通过TryGetValue安全取值,避免键不存在时抛出异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 02:11:10