A MatchEvaluatorcan do this:
string input = "FindbcFinddefFind", pattern = "Find";
int i = 1;
string replaced = Regex.Replace(input, pattern, match => "REPLACE" + i++);
Note that the variable matchalso has access to match, etc. With C # 2.0, you will need to use an anonymous method, not a lambda (but the same effect), to show both this and this match:
string input = "FindbcFinddefFind", pattern = "Find";
int i = 1;
string replaced = Regex.Replace(input, pattern, delegate(Match match)
{
string s = match.Value.ToUpper() + i;
i++;
return s;
});