Во-первых, вам не нужно []
вокруг одной группы символов / специальных символов, так как имеет смысл только, что вы хотите сгруппировать несколько символов вместе. Ваше регулярное выражение эквивалентно /:\s\w/
.
Чтобы решить вашу проблему, вы можете использовать группу захвата и заново вставить захваченную букву:
s.gsub(/:\s(\w)/, ': ~\1')
# => "name: ~Name, phone_number: ~Phone Number, inactive: ~Inactive "
Или используйте заглядывание, чтобы вообще не заменить букву:
s.gsub(/:\s(?=\w)/, ': ~')
# => "name: ~Name, phone_number: ~Phone Number, inactive: ~Inactive "
Возможно, вы бы предпочли использовать /:\s+(?=\w)/
, что позволило бы использовать более одного пробела перед следующим символом.