Как отделить группу от цифр?

206
02 января 2019, 16:50

Как при замене по регулярке в строке подстановки после группы $1 написать нечто, начинающееся с цифры, чтобы оно не стало частью номера группы?

Например, здесь два подряд идущих одинаковых символа заменяется на этот символ, пробел и цифру 2: https://ideone.com/ccxPbK

Regex.Replace("abbcccdddd", @"(.)\1", "$1 2") // ab 2c 2cd 2d 2

Но если попытаться сделать то же самое без пробела, то получается 12я группа и результат совсем не тот, какой хотелось бы: https://ideone.com/K2D1TF

Regex.Replace("abbcccdddd", @"(.)\1", "$12") // a$12$12c$12$12

PS: Интересует не конкретно эта задача, а проблема в целом.

Answer 1

Нужно в строковом шаблоне замены номер группы заключить в фигурные скобки:

Regex.Replace("abbcccdddd", @"(.)\1", "${1}2")

См. демо регулярного выражения.

Именованные группы тоже можно использовать для этих целей:

Regex.Replace("abbcccdddd", @"(?<name>.)\k<name>", "${name}2")

См. ещё одно демо.

Если с совпадением нужно произвести какие-нибудь дополнительные операции, то можно воспользоваться

Regex.Replace("abbcccdddd", @"(.)\1", m => $"{m.Groups[1].Value}2")
READ ALSO
Как добавить box collider через код

Как добавить box collider через код

Создаю копию объекта через Instantiate (у оригинала стоит Box-Collider) в итоге у копии компонент такой есть, но галочка почему-то снятаКак галочку поставить...

222
C# генерация случайного пути

C# генерация случайного пути

У меня есть двумерный массив целых чиселВ данном массиве есть точка входа [0,0] , а так же точка выхода [Length-1,Length-1]

200
Стрелка на кривой Безье

Стрелка на кривой Безье

Подскажите, как можно нарисовать в конце кривой Безье стрелку? Есть множество примеров как это сделать для прямой линии (1 , 2 , 3), но именно...

234
С# поиск bytes в большом файле и замена

С# поиск bytes в большом файле и замена

Надо поменять в 4 местах hex значение в большом файле 6 gb Использую этот код

200