Las*_*zlo 5 c# regex replace pattern-matching
我有一个文本,该文本包含以#开头和以=“”字符结尾的char序列。在#和=“”之间仅存在字母数字字符,没有空格或; 字符 我试图用以下模式找到指定的序列#[A-Za-z0-9]+(="")
我的问题是如何用三个问号字符替换=“”字符?在C#中?
先感谢您。
正确执行工作所需的方法是捕获需要保留的零件,并仅匹配需要更换的零件:
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#演示。