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

如何用正则表达式替换JSON中的密码值为***

验证C#正则替换Password字段的方案是否可行

需求回顾

你需要把一段JSON格式字符串里的Password字段值替换为***:

  • 原始片段:
    Data: {"Account":"d\\adm","Password":"cWExZjEiMTM="},"SqlServer":{"InstanceName":"","MachineName":"MyMachine","Port":null}
    
  • 预期输出:
    Data: {"Account":"d\\adm","Password":"***"},"SqlServer":{"InstanceName":"","MachineName":"MyMachine","Port":null}
    

你的C#实现代码

string invokeSpec = "\":{\"Account\":\"d\\\\adm\",\"password\":\"cWExZjEiMTM=\"},\"SqlServer\":{\"InstanceName\":\"\",\"MachineName\":\"MyMachine\",\"Port\":null}";
var pattern = "\\\"Password\\\":\\\"(?<pass>[^\\\"]*)\\\"";
var replaced = Regex.Replace(invokeSpec, pattern, "\"Password\":\"***\"", RegexOptions.IgnoreCase);

方案可行性分析

你的这个方案完全可行,具体原因如下:

  • 正则匹配逻辑精准:模式里的\"Password\":\"(?<pass>[^\"]*)\"(注:你代码里的(?&lt;pass&gt;是HTML转义写法,实际运行时应该是(?<pass>,否则会被当作普通字符处理)会精准定位Password字段,[^\"]*会匹配双引号前的所有密码内容,不会误触其他字段。
  • 替换逻辑符合预期:用"Password":"***"替换匹配到的内容,正好把原始密码值替换成星号。
  • 大小写适配:RegexOptions.IgnoreCase选项确保不管字段名是Password还是小写的password都能被匹配替换,覆盖了大小写不一致的场景。

从你给出的执行结果来看,最终输出也完全符合预期,说明这个方案是有效的。

额外优化建议

如果这段内容是标准JSON,其实用JSON序列化库(比如System.Text.Json或Newtonsoft.Json)来解析修改会更稳妥,能避免JSON格式变化(比如字段顺序调整、出现空格)导致正则匹配失败的情况。举个System.Text.Json的简单示例:

// 先将片段补全为合法JSON
var validJson = "{\"Data\":{\"Account\":\"d\\\\adm\",\"Password\":\"cWExZjEiMTM=\"},\"SqlServer\":{\"InstanceName\":\"\",\"MachineName\":\"MyMachine\",\"Port\":null}}";
using var jsonDoc = JsonDocument.Parse(validJson);
using var ms = new MemoryStream();
using var writer = new Utf8JsonWriter(ms);

writer.WriteStartObject();
foreach (var rootProp in jsonDoc.RootElement.EnumerateObject())
{
    if (rootProp.Name == "Data")
    {
        writer.WriteStartObject("Data");
        foreach (var dataProp in rootProp.Value.EnumerateObject())
        {
            if (dataProp.Name.Equals("Password", StringComparison.OrdinalIgnoreCase))
            {
                writer.WriteString("Password", "***");
            }
            else
            {
                dataProp.WriteTo(writer);
            }
        }
        writer.WriteEndObject();
    }
    else
    {
        rootProp.WriteTo(writer);
    }
}
writer.WriteEndObject();
writer.Flush();

var result = Encoding.UTF8.GetString(ms.ToArray());

不过如果只是处理固定格式的片段,你的正则方案已经足够好用啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 18:49:04