C# 如何在C中用正则表达式替换为pattern#

C# 如何在C中用正则表达式替换为pattern#,c#,regex,replace,pattern-matching,C#,Regex,Replace,Pattern Matching,我有一个文本,文本包含字符序列,以#开头,以=“字符”结尾。#和=“字符之间只存在字母数字字符,没有空格或空格;查斯。 我试图用以下模式找到指定的序列#[A-Za-z0-9]+(=“”) 我的问题是如何用三个问号字符替换=“字符”???在C#中 提前感谢。正确的做法是捕获需要保留的零件,并仅匹配需要更换的零件: var result = Regex.Replace(s, "(#[A-Za-z0-9]+)=\"\"", "$1???"); 看 在(#[A-Za-z0-9]+)=“模式中,#和字母

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


提前感谢。

正确的做法是捕获需要保留的零件,并仅匹配需要更换的零件:

var result = Regex.Replace(s, "(#[A-Za-z0-9]+)=\"\"", "$1???");

(#[A-Za-z0-9]+)=“
模式中,
#
和字母数字字符被捕获到组1中,然后在替换的反向引用
$1
的帮助下重新插入到结果字符串中(也称为组1的占位符)。由于
=”
是一个已知长度的字符串,您可以安全地在
$1
后面放置三个
字符

如果你没有控制模式,只需要替换第一组的内容,如果你不知道组2值的长度(情况不是这样,但让我们泛化),你可以考虑以下方法:

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);