[英]Regex for match and replace substring
我們具有記錄所有請求的日志記錄功能,現在我想從請求正文中隱藏一些敏感數據。
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()中,我要搜索Name並將名稱值“ TestName”替換為“ *****”
另外,如果還有其他要與名稱一起隱藏的字段,我也必須替換它們。
誰能建議最好的方法來解決這個問題?
應該這樣做:
string RemoveSensitiveData(string value) => Regex.Replace(value, "((^|&)(Name|OtherSensitiveData)=)[^&]+", m => m.Groups[1].Value + "*****")
編輯:添加(^|&)
確保完全匹配
如果要用固定數量的星號“屏蔽”某些參數,則可以使用不帶MatchEvaluator的簡單Regex.Replace
:
string RemoveSensitiveData(string value) =>
Regex.Replace(value, "((?:&|^)(?:Name|OtherSensitiveData)=)[^&]+", "$1*****")
如果您打算用相同數量的星號替換,請使用
string RemoveSensitiveData(string value) =>
Regex.Replace(value, "((?:&|^)(?:Name|OtherSensitiveData)=)([^&]+)", m =>
$"{m.Groups[1].Value}{new String('*', m.Groups[2].Value.Length)}")
正則表達式詳細信息
((?:&|^)(?:Name|OtherSensitiveData)=)
-組1:
(?:&|^)
- &
char或字符串開頭匹配的非捕獲組(可以用(?<![^&])
替換) (?:Name|OtherSensitiveData)
-與Name
或OtherSensitiveData
子字符串匹配的非捕獲組 =
-等號 ([^&]+)
-組2: &
以外的任何1+個字符。 參見C#演示:
var value = "Id=12345&Id=&Name=TestName&AddressLine1=1232+test+&AddressLine2=sdf&City=abcd";
Console.WriteLine(Regex.Replace(value, "((?:&|^)(?:Name|OtherSensitiveData)=)[^&]+", "$1*****"));
// => Id=12345&Id=&Name=*****&AddressLine1=1232+test+&AddressLine2=sdf&City=abcd
Console.WriteLine(Regex.Replace(value, "((?:&|^)(?:Name|OtherSensitiveData)=)([^&]+)", m =>
$"{m.Groups[1].Value}{new String('*', m.Groups[2].Value.Length)}"));
// => Id=12345&Id=&Name=********&AddressLine1=1232+test+&AddressLine2=sdf&City=abcd
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.