我有以下字符串(最初是XML):
<Message><ProcedureName>TestUpdate</ProcedureName><Parameters><![CDATA[N'Yes',N'No']]></Parameters><MessageType>A</MessageType></Message>
我已尝试过以下内容,但文字“否”是动态的(它可以是不同的值):
message.Replace("No", "********");
我不确定我是否可以使用string.Replace
,正则表达式或两者兼而有之?
答案 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, "********");
}