Как при замене по регулярке в строке подстановки после группы $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: Интересует не конкретно эта задача, а проблема в целом.
Ответ
Нужно в строковом шаблоне замены номер группы заключить в фигурные скобки:
Regex.Replace("abbcccdddd", @"(.)\1", "${1}2")
См. демо регулярного выражения
Именованные группы тоже можно использовать для этих целей:
Regex.Replace("abbcccdddd", @"(?
См. ещё одно демо
Если с совпадением нужно произвести какие-нибудь дополнительные операции, то можно воспользоваться
Regex.Replace("abbcccdddd", @"(.)\1", m => $"{m.Groups[1].Value}2")
Комментариев нет:
Отправить комментарий