Обращение с текстом замены 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)
?
Ответы
Ответ 1
От MSDN:
Параметр замены указывает строку, которая должна заменить каждое соответствие на входе. замена может состоять из любой комбинации буквального текста и подстановок.
Определены следующие подстановки :
- $число
- ${имя}
- $$
- $&
- $`
- $
- $+
- $_
Замены являются единственными специальными конструкциями, признанными в шаблоне замены. Поддерживаются ни один из других элементов языка регулярных выражений, включая escape-символы символов и период (.), Который соответствует любому символу. Аналогично, элементы языка замещения распознаются только в шаблонах замещения и никогда не действительны в шаблонах регулярных выражений.
Таким образом, это выглядит как только символ $, который должен быть экранирован.