代码之家  ›  专栏  ›  技术社区  ›  Samuel Goldenbaum

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

  •  2
  • Samuel Goldenbaum  · 技术社区  · 7 年前

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

    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();
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Kirill Polishchuk    7 年前

    这应该起作用:

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