如何在C#中使用正则表达式替换模式?

11

我有一段文本,其中包含以#开头、以=""结尾的字符序列。在#和=""之间只存在字母数字字符,不含空格或分号。 我试图使用以下模式#[A-Za-z0-9]+(="")查找指定的序列。 我的问题是如何在C#中将=""字符替换为三个问号???。

提前致谢。

1个回答

20

你需要做的正确方法是捕获你需要保留的部分,并只匹配你需要替换的内容:

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# 演示


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接