Подтвердить что ты не робот

Обращение с текстом замены escape-кода регулярного выражения, которое содержит символ доллара

string input = "Hello World!";
string pattern = "(World|Universe)";
string replacement = "$1";

string result = Regex.Replace(input, pattern, replacement);

В следующем примере результат будет "Hello World!", так как $1 будет заменен первой группой (World|Universe), однако я хочу получить "Hello $1!"

Метод Regex.Escape предназначен для использования шаблона Regex, а не замены, поскольку он может вызывать другие символы, такие как слэши и другие символы шаблона Regex. Очевидное решение моей проблемы заключается в том, чтобы моя замена была равна "$$1", и достигнет "Hello $1!", но мне было интересно, является ли знак доллара единственным значением, которое мне нужно избежать (предполагая, что replacement генерируется пользователем, и Я не знаю этого заранее), или есть вспомогательная функция, которая делает это уже.

Кто-нибудь знает о функции, чтобы избежать замены значения, которое использует Regex.Replace(string input, string pattern, string replacement)?

4b9b3361

Ответ 1

От MSDN:

Параметр замены указывает строку, которая должна заменить каждое соответствие на входе. замена может состоять из любой комбинации буквального текста и подстановок.

Определены следующие подстановки :

  • $число
  • ${имя}
  • $$
  • $&
  • $`
  • $
  • $+
  • $_

Замены являются единственными специальными конструкциями, признанными в шаблоне замены. Поддерживаются ни один из других элементов языка регулярных выражений, включая escape-символы символов и период (.), Который соответствует любому символу. Аналогично, элементы языка замещения распознаются только в шаблонах замещения и никогда не действительны в шаблонах регулярных выражений.

Таким образом, это выглядит как только символ $, который должен быть экранирован.