如何从Regex.Replace获得匹配数

时间:2015-06-05 17:31:40

标签: c# .net

我想在C#dot net中进行正则表达式替换,我想知道有多少替换。什么是最好的方式?

我现在能做的最好的事情就是看看之前/之后是否有任何改变

var a = "gooodbaaad";
var b = Regex.Replace(a,"[oa]","x");
if (a != b) Debug.Write("changed");

但这似乎是间接的,在所有情况下都不准确。

2 个答案:

答案 0 :(得分:5)

尝试以下内容。它将1个或多个单词字符的所有序列转换为文本文本{word}并计算替换次数。那么,源文本

The quick brown fox jumped over the lazy dog.

将转换为

{word} {word} {word} {word} {word} {word} {word} {word} {word}.

在操作结束时,变量cnt的值为9

Regex pattern      = new Regex( @"\w+" ) ;
string source      = GetMeMySourceData() ;
int    cnt         = 0 ;
string transformed = pattern.Replace( source , m => {
    ++cnt ;
    return "{word}" ;
  });

关闭的力量。

答案 1 :(得分:3)

尝试使用Regex.Replace with MatchEvaluator

的另一个重载
#!/usr/bin/env ruby

h, m, s = 12, 07, 10
$_.gsub!(/(\d\d):(\d\d)/) do
   '%02d:%02d' % (($1.to_i + h) * 60 + $2.to_i + m).divmod(60) + ":#{s}"
end

demo