Похоже, вы ищете метод Replace
с перегрузкой, которая принимает MatchEvaluator.Страница MSDN для этого метода может быть найдена здесь .
Попробуйте вместо этого:
string input = "[img]http://imagesource.com[/img]";
string pattern = @"\[img]([^\]]+)\[\/img]";
string result = Regex.Replace(input, pattern, m =>
{
var url = m.Groups[1].Value;
// do something with url here
// return the replace value
return @"<img src=""" + url + @""" border=""0"" />";
},
RegexOptions.IgnoreCase);
Здесь используется лямбда из нескольких операторов для упрощения работы с группой ивыполнение большей логики перед возвратом заменяющего значения.Вы могли бы, конечно, обойтись без этого:
string result = Regex.Replace(input, pattern,
m => @"<img src=""" + m.Groups[1].Value + @""" border=""0"" />",
RegexOptions.IgnoreCase);
В вышеприведенном случае нет необходимости в return
, а просто возвращает исходную строку без дополнительной оценки.Можно добавить несколько троичных операторов и добавить эту логику, но это будет выглядеть грязно.Многозначная лямбда намного чище.Вы можете рассмотреть возможность использования его собственным способом, как показано в вышеупомянутой ссылке MSDN, если он слишком велик или будет повторно использован в других Regex.Replace
усилиях.
Кстати, я также немного упростил ваш шаблон,удаление побегов для ]
.Только отверстие [
должно быть экранировано.