Рейтинг:
12
Richard Deeming
Что-то вроде этого должно сработать:
private static readonly Regex Pattern = new Regex("{(.+?)}", RegexOptions.Compiled);
public override object ProvideValue(IServiceProvider serviceProvider)
{
return Pattern.Replace(String, match =>
{
string newMatch = match.Groups[1].Value;
var value = new StaticResourceExtension(newMatch).ProvideValue(serviceProvider);
return Convert.ToString(value);
});
}
Medtronic WPF Developer
Большое спасибо, я знал, что там что-то есть, но совершенно забыл (это было много лет назад), и было трудно найти ответ, так как большая часть информации о регулярных выражениях-это основной материал, который все еще трудно запомнить, если вы не работаете с ним все время. Я подумал, что там есть немного мозгов, которые я мог бы выбрать и оценить, что вы нашли время, чтобы ответить.
Medtronic WPF Developer
Ты сделал пару ошибок, но ты привел меня в правильном направлении. Это правильный код посередине:
return Pattern.Replace(String, match =>
{
var str = совпадение.Группы[0].Значение;
var provideStr = str.Подстрока(1, стр.Длина - 2 м);
var value = new StaticResourceExtension(provideStr).Метод providevalue(поставщику услуги);
вернуть обменять.ToString(значение);
});
Richard Deeming
Единственная проблема ты вероятно нарваться на это самое "жадное" +
оператор. Если у вас есть несколько совпадений для замены, он в конечном итоге обработает всю подстроку с первой {
до последнего }
.
Измените выражение на "{(.+?)}"
, и вы получите каждый матч индивидуально.
Демонстрация[^]
Medtronic WPF Developer
Спасибо, я починил его, и он отлично работает.
Clifford Nelson
Есть некоторые вещи, которые я не использовал в этом решении. Большие пальцы подняты вверх.