我有一个像The Password for the website is money
这样的字符串,现在如果字符串包含单词"money"
,那么我必须屏蔽像The Password for the website is XXXXX
这样的字符串。替换XXXXX
长度应根据money
的长度而改变,即,如果字符串为The Password for the website is moneyyyyy
,那么我的输出应为The Password for the website is XXXXXXXXX
string content="The Password for the website is money";
string pattern = @"\bmoney\b";
string replace = "XXXXX";
content = Regex.Replace(content, pattern, replace);
但是没有结果我甚至尝试使用字符串替换而不是正则表达式但没有用。 这个你能帮我吗。
答案 0 :(得分:4)
您需要使用匹配评估程序Regex.Replace
和正则表达式匹配任何单词内部的密钥,例如\w*money\w*
:
var content="The Password for the website is money and moneyyyy";
var key = "money";
var pattern = string.Format(@"\w*{0}\w*", Regex.Escape(key));
var mask = 'X';
content = Regex.Replace(content, pattern, m => new string(mask, m.Value.Length));
Console.WriteLine(content);
// => The Password for the website is XXXXX and XXXXXXXX
请参阅C# demo
正则表达式意味着:
\w*
- 零个或多个(*
是一个与量化子模式的零个或多个实例匹配的量词)字母字符(字母,数字和_
符号)。注意如果用\p{L}*
替换它,您可以将此部分调整为仅匹配字母(或者如果您只需要ASCII,请使用[a-zA-Z]*
。money
- key
,如果内部有特殊符号,您可能需要Regex.Escape
\w*
- 见上文。答案 1 :(得分:1)
警告! OP后来添加了密码不在字符串的末尾。我的回答只适用于这种情况。感觉自由顶部继续:)
这样的东西?
在.Net小提琴上Demo。
var k = "The Password for the website is money";
// we remove the noise
var password = k.Replace("The Password for the website is ", "");
// we add the noise and we use a string constructor to duplicate the letter.
Console.WriteLine("The Password for the website is " + new string('X', password.Length));
输出:
The Password for the website is XXXXX
答案 2 :(得分:0)
我假设您的文字更改只有password
部分
string content = "The Password for the website is monafsfasdey";
Regex pattern = new Regex(@"\bis\b\s(.*?)$");
var match = pattern.Match(content);
if (match.Success)
{
string replace = new string( 'X', match.Groups[1].Value.Length);
content = pattern.Replace(content, replace);
}