Это должно сделать это.
int count = 0;
string text = Regex.Replace(text,
@"(((http|ftp|https):\/\/|www\.)[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?)", //Example expression. This one captures URLs.
match =>
{
string replacementValue = String.Format("<a href='{0}'>{0}</a>", match.Value);
count++;
return replacementValue;
});
Я не на своем компьютере разработчика, поэтому я не могу сделать это прямо сейчас, но я собираюсь позже поэкспериментировать и посмотреть, есть ли способ сделать это с помощью лямбда-выражений вместо объявления метода IncrementCount ( ) просто увеличить int.
РЕДАКТИРОВАТЬ изменено, чтобы использовать лямбда-выражение вместо объявления другого метода.
EDIT2 Если вы не знаете шаблон заранее, вы все равно можете получить все группировки (группы $, на которые вы ссылаетесь) внутри объекта соответствия, поскольку они включены в группу GroupCollection. Вот так:
int count = 0;
string text = Regex.Replace(text,
@"(((http|ftp|https):\/\/|www\.)[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?)", //Example expression. This one captures URLs.
match =>
{
string replacementValue = String.Format("<a href='{0}'>{0}</a>", match.Value);
count++;
foreach (Group g in match.Groups)
{
g.Value; //Do stuff with g.Value
}
return replacementValue;
});