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

C#中$符号无法插值含大括号内容,如何生成{{name}}格式字符串?

解决C#字符串插值生成双大括号及模板占位符替换问题

一、先搞定$符号生成{{name}}格式字符串的问题

你遇到的问题是C#字符串插值的转义规则导致的:{{ 在插值字符串里会被转义成单个 {,所以直接写 $"{{name}}" 只会输出 {name},而非你想要的 {{name}}。

分两种场景处理:

  • 如果是生成固定字面量的{{name}}(不需要插入变量),根本不用$符号,直接写 "{{name}}" 就行,这会直接输出双大括号包裹的name。
  • 如果是生成插值后的{{变量值}}(比如变量name的值是"Alice",要输出{{Alice}}),得这么写:
string name = "Alice";
string result = $"{{{{{name}}}}}";
// 输出结果:{{Alice}}

原理很简单:前两个{{转义成一个{,中间的{name}是插值变量,最后两个}}转义成一个},组合起来就是双大括号包裹变量值的格式。

二、模板占位符替换的解决方案

你的场景是把模板中{{paramsHtml.Name}}这类占位符替换为HttpUtility.HtmlEncode(paramsHtml.Value)的结果,分两种情况选方案:

情况1:单个固定占位符替换

如果只是替换某一个特定的占位符(比如只替换{{thisIsPlaceholder}}),用string.Replace就足够,完全没必要用正则:

string template = "Hello {{thisIsPlaceholder}}!";
string encodedValue = HttpUtility.HtmlEncode(paramsHtml.Value);
string result = template.Replace("{{thisIsPlaceholder}}", encodedValue);

情况2:多个动态占位符替换

如果模板里有多个不同的占位符,或者占位符名称是动态对应paramsHtml集合的,那正则表达式会更高效灵活。

比如用正则匹配{{([a-zA-Z0-9_]+)}}格式的占位符,再通过匹配到的名称去查找对应的值并替换:

using System.Text.RegularExpressions;

string template = "Name: {{Name}}, Age: {{Age}}";
// 假设用字典存储占位符与对应编码后的值
var placeholderValues = new Dictionary<string, string>
{
    {"Name", HttpUtility.HtmlEncode("O'Neil")},
    {"Age", HttpUtility.HtmlEncode("30")}
};

// 正则匹配并替换所有{{xxx}}格式占位符
string result = Regex.Replace(template, @"{{(\w+)}}", match => 
{
    string placeholderName = match.Groups[1].Value;
    // 找到对应值就替换,找不到就保留原占位符
    return placeholderValues.TryGetValue(placeholderName, out var value) ? value : match.Value;
});

这个方案能一次性处理所有符合格式的占位符,非常适合多占位符的模板场景。

总结

  • 生成双大括号字符串:固定字面量用"{{name}}",插值变量用$"{{{{{var}}}}}"
  • 单个固定占位符替换:string.Replace足够,无需正则
  • 多个动态占位符替换:正则表达式是更优选择

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 00:27:49