首页 文章

如何在C#中的RegEx替换操作中使用计算值?

提问于
浏览
9

我正在寻找一种方法来使用c#regex.replace函数在replace表达式中使用匹配组的长度 .

也就是说,我可以取代什么?在下面的示例中,获得下面显示的所需输出?

Example:

val = Regex.Replace("xxx", @"(?<exes>x{1,6})", "${exes} - ???");

Desired output

X - 3

Note: 这是一个非常人为/简化的例子来证明这个问题 . 我意识到在这个例子中,正则表达式不是理想的做法 . 请相信我,答案的真实世界应用是一个更复杂的问题的一部分,需要在这里使用RegEx替换 .

3 回答

  • 3

    尝试使用调用函数的 Regex.Replace 版本来确定替换文本应该是什么:

    public string Replace(string, MatchEvaluator);
    

    http://msdn.microsoft.com/en-us/library/aa332127(VS.71).aspx

    然后,该函数可以查看匹配的文本( Match 对象作为评估器函数的参数提供)并返回具有正确计算值的字符串 .

  • 9

    如果您使用的是C#3,则只需从lambda表达式创建MatchEvaluator即可:

    string val = Regex.Replace(
       "xxx",
       @"(?<exes>x{1,6})",
       new MatchEvaluator(
          m => m.Groups["exes"].Value[0] + " - " + m.Groups["exes"].Value.Length.ToString()
       )
    );
    

    在C#2中,您可以使用委托:

    string val = Regex.Replace(
       "xxx",
       @"(?<exes>x{1,6})",
       new MatchEvaluator(
          delegate(Match m) {
             return m.Groups["exes"].Value[0] + " - " + m.Groups["exes"].Value.Length.ToString();
          }
       )
    );
    
  • 13

    尝试

    val = Regex.Replace("xxx", @"(?<exes>x{1,6})", new MatchEvaluator(ComputeReplacement));
    

    使用下面的MatchEvaluator示例

    public String ComputeReplacement(Match matchResult) {
      return matchResult.Value.Length.ToString();
    }
    

    (从正则表达式菜谱中部分被盗 - 我的圣经哈哈)

相关问题