我有一段文本,其中包含以#开头、以=""结尾的字符序列。在#和=""之间只存在字母数字字符,不含空格或分号。
我试图使用以下模式#[A-Za-z0-9]+(="")
查找指定的序列。
我的问题是如何在C#中将=""字符替换为三个问号???。
提前致谢。
我有一段文本,其中包含以#开头、以=""结尾的字符序列。在#和=""之间只存在字母数字字符,不含空格或分号。
我试图使用以下模式#[A-Za-z0-9]+(="")
查找指定的序列。
我的问题是如何在C#中将=""字符替换为三个问号???。
提前致谢。
你需要做的正确方法是捕获你需要保留的部分,并只匹配你需要替换的内容:
var result = Regex.Replace(s, "(#[A-Za-z0-9]+)=\"\"", "$1???");
请查看正则表达式演示。
在(#[A-Za-z0-9]+)=""
模式中,#和数字字母字符被捕获到第1组中,并通过替换反向引用$1
(也称为第1组的占位符)重新插入到结果字符串中。由于=""
是一个已知长度的字符串,因此可以在$1
后放置三个?
字符。
如果您无法控制模式,只需要替换第一组内容,并且不知道第二组值的长度(虽然这不是这种情况,但让我们概括一下),您可以考虑以下方法:
var s = "#Abc=\"\"";
var result = Regex.Replace(s, "#[A-Za-z0-9]+(=\"\")", m=>
string.Format("{0}{1}{2}",
m.Value.Substring(0, m.Groups[1].Index), // Get the substring up to Group 1 value
new string('?', m.Groups[1].Length), // Build the string of Group 1 length ?s
m.Value.Substring(m.Groups[1].Index+m.Groups[1].Length, m.Value.Length-m.Groups[1].Index-m.Groups[1].Length))); // Append the rest of the match
Console.WriteLine(result);
请参见这个 C# 演示。