Ruby gsub regex для добавления первого соответствующего символа обратно в замененную строку - PullRequest
3 голосов
/ 22 февраля 2012

У меня есть небольшой фрагмент регулярного выражения в ruby, который заменяет ": [\ w]" на ': ~'

>> "name: Name, phone_number: Phone Number, inactive: Inactive ".gsub(/[:]\s[\w]/, ': ~')

=> "name: ~ame, phone_number: ~hone Number, inactive: ~nactive "

Как я могу изменить выражение gsub для добавления первого символа обратно в замененную строку, т.е.:

=> "имя: ~ Имя, номер телефона: ~ Номер телефона, неактивно: ~ Неактивно"

Спасибо

1 Ответ

3 голосов
/ 22 февраля 2012

Во-первых, вам не нужно [] вокруг одной группы символов / специальных символов, так как имеет смысл только, что вы хотите сгруппировать несколько символов вместе. Ваше регулярное выражение эквивалентно /:\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)/, что позволило бы использовать более одного пробела перед следующим символом.

...