Как избежать части замены/замены в .NET Regex Replace

Я хочу избежать части замены в команде замены регулярного выражения в .NET:

public static string GetPriceMessage(string data, string price)
{
    var repl = "This is a $1 priced at " + price + " suitable for $2.";
    return Regex.Replace(data, "item_name: ([^;]+); suitable: ([^;]+)", repl);
}

var price = "$15/item";
var data = "item_name: Puzzle; suitable: all ages";

GetPriceMessage(data, price)

Я хочу убедиться, что price заменено дословно. Regex.Escape не работает.


person johv    schedule 08.01.2014    source источник


Ответы (1)


Вам нужно экранировать только $ в заменах, так как все замены начинаются с $. т.е. просто используйте:

price.Replace("$", "$$");

Подробности см. в следующем вопросе: Обработка замещающего текста регулярного выражения, содержащего символ доллара

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

[...]

В шаблоне замены $ указывает на начало замены.

person johv    schedule 08.01.2014
comment
Или просто измените string price = "$15/item" ; на string price = "$$15/item" ; - person Nicholas Carey; 09.01.2014