MIT сделал доступным весь курс LISP в формате MPEG и DIVX. Я настоятельно рекомендую его.
http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman-lectures/
Вы можете использовать MatchEvaluator
, который выполняется для каждой замены, таким образом, вы можете подсчитать, сколько раз это происходит:
int cnt = 0;
string result = Regex.Replace("aaa", "a", m => {
cnt++;
return "b";
});
Второй случай сложнее, так как вы должны получить тот же результат, что и шаблон замены будет:
int cnt = 0;
string result = Regex.Replace("aaa", "(?<test>aa?)", m => {
cnt++;
return m.Groups["test"] + "b";
});