C# RegEx替换:如何在替换中动态获取匹配的长度

C# RegEx替换:如何在替换中动态获取匹配的长度,c#,.net,regex,C#,.net,Regex,有没有办法用匹配中相同长度的字符替换匹配表达式?在下面的代码中更容易理解: var input = "hello hellspawn, goto hell!"; var pattern = @"(hell)(?!o)"; var replacement = "****"; // is there a dynamic way to specify length here? var replaced = Regex.Replace(input, pattern, replacement, Regex

有没有办法用匹配中相同长度的字符替换匹配表达式?在下面的代码中更容易理解:

var input = "hello hellspawn, goto hell!";
var pattern = @"(hell)(?!o)";
var replacement = "****"; // is there a dynamic way to specify length here?
var replaced = Regex.Replace(input, pattern, replacement, RegexOptions.IgnoreCase);
我可以用火柴来做:

var sbInput = new StringBuilder(input);
var sb = new StringBuilder();
var matches = Regex.Matches(input, pattern, RegexOptions.IgnoreCase);

foreach (Match match in matches) {
   sb.Length = 0;
   for (var i = 0; i < match.Length; i++) {
      sb.Append("*");
    }

    sbInput.Replace(match.Value, sb.ToString(), match.Index, match.Length);
}

var replaced = sbInput.ToString();
var sbInput=新的StringBuilder(输入);
var sb=新的StringBuilder();
var matches=Regex.matches(输入、模式、RegexOptions.IgnoreCase);
foreach(匹配中的匹配){
sb.长度=0;
对于(变量i=0;i
这应该可以:

var replaced = Regex.Replace(input, pattern,
    m => new string('*', m.Length),
    RegexOptions.IgnoreCase);