首页 > 解决方案 > 用于匹配和替换子字符串的正则表达式

问题描述

我们有记录功能来记录所有请求,现在我想从请求正文中隐藏一些敏感数据。

string body = null;

using (var reader = new StreamReader(request.InputStream))
{
    request.InputStream.Seek(0L, SeekOrigin.Begin);
    body = reader.ReadToEnd();
}

if (!string.IsNullOrWhiteSpace(body))
{
    _logger.NameValueLogger.Add("body", RemoveSensitiveData(body));
}

正文内容示例:

"Id=12345&Id=&Name=TestName&AddressLine1=1232+test+&AddressLine2=sdf&City=abcd"

现在在RemoveSensitiveData()我想搜索名称并将名称值“TestName”替换为“*****”

此外,如果我想与名称一起隐藏任何其他字段,我也必须替换它们。

任何人都可以建议处理这个问题的最佳方法吗?

标签: c#asp.net.netregexstring

解决方案


这应该这样做:

string RemoveSensitiveData(string value) => Regex.Replace(value, "((^|&)(Name|OtherSensitiveData)=)[^&]+", m => m.Groups[1].Value + "*****")

编辑:添加(^|&)确保完全匹配


推荐阅读