如果c#中句子中存在单词,如何掩盖句子中的特定单词

时间:2017-03-10 10:56:45

标签: c# string

我有一个像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);

但是没有结果我甚至尝试使用字符串替换而不是正则表达式但没有用。 这个你能帮我吗。

3 个答案:

答案 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);
}