A $N
в шаблоне замены относится к группе захвата Nth , поэтому механизм регулярных выражений считает, что вы хотите сослаться на номер группы захвата "09876543210", и выдает ArgumentException
. Если вы хотите использовать буквенный символ $
в строке замены, удвойте его, чтобы экранировать символ: & $$09876543210-$$2000-
string input = @"field id=""25"" ordinal=""15"" value=""& $01234567890-$2000-""";
string pattern = @"(?<=value="").*(?="")";
string replacement = "& $$09876543210-$$2000-";
string result = Regex.Replace(input, pattern, replacement);
Кроме того, ваш шаблон в настоящее время жадный и может соответствовать больше, чем предполагалось Чтобы сделать его не жадным, используйте .*?
, чтобы оно не заканчивалось совпадением, кроме следующей двойной кавычки позже в строке, или [^"]*
, чтобы оно совпадало со всем, кроме двойной кавычки. Обновленный шаблон будет: @"(?<=value="").*?(?="")"
или @"(?<=value="")[^""]*(?="")"
. Если вы никогда не ожидаете, что атрибут value будет пустым, я предлагаю использовать +
вместо *
в любом из шаблонов, чтобы убедиться, что он соответствует хотя бы одному символу.