【发布时间】:2019-05-31 17:57:47
【问题描述】:
我知道我可以使用 RegEx 将所有出现的“a”、“b”或“c”替换为字符串中的黑斜线字符,如下所示:
string result = Regex.Replace(input, "[abc]", "\\");
但是我怎样才能用反斜杠后跟匹配的字符替换每个匹配项?
【问题讨论】:
我知道我可以使用 RegEx 将所有出现的“a”、“b”或“c”替换为字符串中的黑斜线字符,如下所示:
string result = Regex.Replace(input, "[abc]", "\\");
但是我怎样才能用反斜杠后跟匹配的字符替换每个匹配项?
【问题讨论】:
您可以使用MatchEvaluator 委托和this overload of Replace 转换每个Match...
Regex.Replace(input, @"[abc]", m => string.Format(@"\{0}", m.Value))
【讨论】:
无需使用任何MatchEvaluator,Regex.Replace 提供专用方法来访问替换模式中的整个匹配值:$&。见Substituting the Entire Match:
$&替换包括替换字符串中的整个匹配项。通常,它用于在匹配字符串的开头或结尾添加子字符串。例如, ($&) 替换模式在每个匹配项的开头和结尾添加括号。如果没有匹配,$&替换无效。
使用
var result = Regex.Replace(input, @"[abc]", @"\$&");
var s = "abcd";
var result = Regex.Replace(s, @"[abc]", @"\$&");
Console.WriteLine(result);
// => \a\b\cd
【讨论】: