Используйте ${1}
вместо $1
. Это также синтаксис подстановки для группы захвата named (?
.
Вот фрагмент, иллюстрирующий ( см. Также на 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}1")); // a1b1c1
Это поведение явно документировано:
Элементы языка регулярного выражения - Замены
Подстановка нумерованной группы
Элемент языка
$number
включает в себя последнюю подстроку, согласованную группой захватаnumber
в заменяющей строке, гдеnumber
является индексом группы захвата.Если
number
не указывает действительную группу захвата, определенную в шаблоне регулярного выражения,$number
интерпретируется как последовательность символов букв , которая используется для замены каждого соответствия.Подстановка именованной группы
Элемент языка
${name}
заменяет последнюю подстроку, соответствующую группе захватаname
, гдеname
- имя группы захвата, определенной элементом языка(?
.) Если
blockquote>name
не указывает fy действительная группа захвата, определенная в шаблоне регулярного выражения,${name}
интерпретируется как последовательность символов литерала , которая используется для замены каждого соответствия.