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