如何在字符串中屏蔽标签内的字符串?

时间:2018-04-18 10:01:24

标签: c# regex replace

我有以下字符串(最初是XML):

<Message><ProcedureName>TestUpdate</ProcedureName><Parameters><![CDATA[N'Yes',N'No']]></Parameters><MessageType>A</MessageType></Message>

我已尝试过以下内容,但文字“否”是动态的(它可以是不同的值):

message.Replace("No", "********");

我不确定我是否可以使用string.Replace正则表达式或两者兼而有之?

3 个答案:

答案 0 :(得分:1)

您可以使用正则表达式在替换之前获取2个标记之间的字符串:

 string str = "<Message><ProcedureName>TestUpdate</ProcedureName><Parameters><![CDATA[N'Yes',N'No']]></Parameters><MessageType>A</MessageType></Message>";
 Match match = Regex.Match(str, @"CDATA\[.*\]");
 if (match.Success)
 {
    Console.WriteLine(str_out);//"CDATA[N'Yes', N'No']]"
 }

答案 1 :(得分:0)

假设有动态的&#39;你的意思是它可以是任何东西,包括&#39; No&#39;,这是我的尝试:

var source = "<Message><ProcedureName>TestUpdate</ProcedureName><Parameters><![CDATA[N'Yes',N'No']]></Parameters><MessageType>A</MessageType></Message>";
var regexstr = @"(.*\[CDATA\[.*,N')(.*)('\]\].*)";

var regex = new Regex(regexstr);
var matches = regex.Match(source);
Console.WriteLine($"{matches.Groups[1].Value}****{matches.Groups[3].Value}");

//Console Output: <Message><ProcedureName>TestUpdate</ProcedureName><Parameters><![CDATA[N'Yes',N'****']]></Parameters><MessageType>A</MessageType></Message>

这可能会进一步优化,但这取决于您的来源。希望它有所帮助!

答案 2 :(得分:0)

这是我已经解决的问题。它并不完美,但它满足了我的要求。

Match match = Regex.Match(message, @"CDATA\[.*\]");
if (match.Success)
{
    maskedMessage = message.Replace(match.Value, "********");
}