Страницы

Поиск по вопросам

воскресенье, 15 декабря 2019 г.

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

#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")

Комментариев нет:

Отправить комментарий