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

Las*_*zlo 5 c# regex replace pattern-matching

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

先感谢您。

Wik*_*żew 7

正确执行工作所需的方法是捕获需要保留的零件,并仅匹配需要更换的零件:

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

参见regex演示

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

如果您无法控制模式,而只需要替换第一组的内容,并且如果您不知道Group 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);
Run Code Online (Sandbox Code Playgroud)

请参阅此C#演示