Сначала я бы заменил {}
на EMPTY
без использования регулярного выражения.
Тогда используйте
(?<!{){(foo|bar)}(?!})
для соответствия {foo}
или {bar}
, но не {}
или {{anything}}
или {anything}
Номер обратной ссылки. 1 содержит совпавший текст.
Так что фрагмент кода может выглядеть как
Regex matches = new Regex(@"(?<!\{)\{(foo|bar)\}(?!\})", RegexOptions.IgnoreCase);
resultString = matches.Replace(subjectString, "$1".ToUpper());
(Я надеюсь, что вызов ToUpper () для строки работает; я не знаю C #, поэтому, пожалуйста, исправьте меня, если я ошибаюсь)