Ответ 1
Используйте ${1}
вместо $1
. Это также синтаксис подстановки для группы (?<name>)
.
Вот фрагмент, который можно проиллюстрировать (см. также на ideone.com):
Console.WriteLine(Regex.Replace("abc", "(.)", "$11")); // $11$11$11
Console.WriteLine(Regex.Replace("abc", "(.)", "${1}1")); // a1b1c1
Console.WriteLine(Regex.Replace("abc", "(?<x>.)", "${x}1")); // a1b1c1
Это поведение явно документировано:
Элементы языка регулярного выражения - Замены
Подстановка нумерованной группы
Элемент языка
$number
включает в себя последнюю подстроку, согласованную группой захватаnumber
в заменяющей строке, гдеnumber
- индекс группы захвата.Если
number
не указывает допустимую группу захвата, определенную в шаблоне регулярного выражения,$number
интерпретируется как буквальная последовательность символов, которая используется для замены каждого соответствия.Подстановка именной группы
Языковой элемент
${name}
заменяет последнюю подстроку, согласованную группой захватаname
, гдеname
- это имя группы захвата, определенной элементом языка(?<name>)
.Если
name
не указывает допустимую группу захвата именования, определенную в шаблоне регулярного выражения,${name}
интерпретируется как буквальная последовательность символов, которая используется для замены каждого соответствия.