Задать вопрос
@OrdeO
just......newbie

Как сделать первую букву заглавной используя регулярные выражения в руби?

есть функция, которая обрабатывает некий массив хешей:
def get_document(document)
  document.map do |doc|
    {
      'Type' => doc['doc_type'],
      'Name' => doc['name'],
      'No.' => doc['doc_number'],
      'Address' => doc['address'],
      'Date' => doc['doc_exp']
    }
  end
end


Проблема заключается в том, что 'Type' => doc['doc_type'] приходят данные в виде предложения из 5-6 слов где первое слово всегда с маленькой буквы, а остальные с большой, мне нужно что б первое слово также было с большой буквы. Когда использую .capitalize то только первое слово становится с большой буквы, а остальные становятся с маленькой, как можно корректно это сделать, есть предположение что, возможно, через регулярные выражения, но я их не знаю.
  • Вопрос задан
  • 622 просмотра
Подписаться 2 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 3
У меня была подобная задача.
Нужно было «имя отчество фамилия» преобразовывать в «Имя Отчество Фамилия».
Решил через расширение стандартного класса `class String`.
Метод `#capitalize_words` разбивает строку на массив из слов и проходит по каждому слову и делает ему «капитализацию».
После этого собирает массив в исходную строчку.

class String
  # @see String#capitalize
  def capitalize_words(separator = ' ')
    words = split(separator).map(&:capitalize)
    words.join separator
  end
end


Ниже тест `RSpec` для метода, на всякий случай.

describe String do
  describe '#capitalize_words' do
    context 'with word' do
      let :one_word do
        'foo'
      end

      it 'return capitalized word' do
        expect(one_word.capitalize_words).to eq 'Foo'
      end
    end

    context 'with words' do
      let :words do
        'foo bar'
      end

      it 'return capitalized all words' do
        expect(words.capitalize_words).to eq 'Foo Bar'
      end
    end

    context 'with custom separator' do
      let :words do
        'foo$bar'
      end

      let :custom_separator do
        '$'
      end

      it 'return capitalized with custom separator' do
        expect(words.capitalize_words(custom_separator)).to eq 'Foo$Bar'
      end
    end

    context 'with empty' do
      let :empty do
        ''
      end

      it 'return empty' do
        expect(empty.capitalize_words).to eq empty
      end
    end
  end
end
Ответ написан
Комментировать
words = "some String" 
words[0] = words[0].capitalize
Ответ написан
profesor08
@profesor08
https://code-maven.com/how-to-convert-a-string-to-...

name = 'Foo'
puts name           # Ruby
puts name.downcase  # ruby
puts name.upcase    # RUBY
puts name           # Ruby
 
 
puts name.downcase! # ruby
puts name           # ruby
 
puts name.upcase!   # RUBY
puts name           # RUBY


Резюмируя полученные нубские знания

name = 'ruby Ruby';
name[0] = name[0].upcase
print name # Ruby Ruby


P.S. Мой первый раз с руби... Потратил времени меньше чем ты на написание вопроса.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы