Вопрос по c#, regex – Обработка regex escape-текста замены, который содержит символ доллара

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

string result = Regex.Replace(input, pattern, replacement);
</code>

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

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

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

Ваш Ответ

1   ответ
17

MSDN:

The replacement parameter specifies the string that is to replace each match in input. replacement can consist of any combination of literal text and substitutions.

Следующие заменыопределены:

$number ${name} $$ $& $` $' $+ $_

Substitutions are the only special constructs recognized in a replacement pattern. None of the other regular expression language elements, including character escapes and the period (.), which matches any character, are supported. Similarly, substitution language elements are recognized only in replacement patterns and are never valid in regular expression patterns.

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

Также из MSDN: замены - это единственные элементы языка регулярных выражений, которые распознаются в шаблоне замены. Все остальные элементы языка регулярных выражений, включая символьные экранирования, разрешены только в шаблонах регулярных выражений и не распознаются в шаблонах замены.
Да,replacement.Replace("$", "$$") должно быть все, что вам нужно.
Это выглядит достаточно хорошо для меня, я подозреваю, что делает глупый ол & apos;replacement.Replace("$", "$$") должно быть хорошо 100% времени тогда? Matthew
Отлично, спасибо @dtb Matthew

Похожие вопросы