Используйте регулярное выражение, соответствующее спецификатору поля:
var fieldRegex = new Regex(@"{\$([^}]+?)}", RegexOptions.Compiled);
Объяснение регулярного выражения:
- литерал
{
- литерал
$
(который должен быть экранирован) - захваченная группа
( )
, содержащая: - не-
}
символов - один или несколько из них
+
- принимая как можно меньше
?
(ленивый захват)
- литерал
}
Сопоставьте это регулярное выражение с шаблоном, используяПользовательский оценщик, который подставляет в соответствующее значение поля:
var template = "hello {$name}. you are {$age} years old. you live in {$location}";
var fieldValues = new Dictionary<string, string>
{
{ "name", "spender" },
{ "age", "38" },
{ "location", "UK" },
};
var output = fieldRegex.Replace(
template,
match => fieldValues[match.Groups[1].Value]);
Вы можете разбить эту лямбду на метод, который проверяет, действительно ли поле существует, если хотите.