Как извлечь первые буквы слов в строке в рубине без цикла?

Я попытался получить первые буквы слов строки, используя ruby. следующее то, что я написал.

puts "world is a better place".split.collect{|w| w[0].capitalize}.join()

Есть ли более сжатый способ получения такого же результата?

1 ответ

Используя регулярное выражение:

"world is a better place".scan(/\b[a-z]/i).join
# => "wiabp"
"world is a better place".scan(/\b[a-z]/i).join.upcase
# => "WIABP"

\b соответствует границе слова. (между символом слова и символом без слова). [az] соответствует любому алфавиту.

\b[az] соответствует первой буквенной букве алфавита.

ПРИМЕЧАНИЕ. Над кодом не будет работать, если есть слово (?), Которое начинается с символа без алфавита. Также не работает, если в нем есть слово, содержащее знаки препинания. (Например: World is 1 better-place.).

ОБНОВИТЬ

Используя String#gsub с группой захвата, вы получите тот же результат:

"world is a better place".gsub(/\s*(\S)\S*/, '\1').upcase
# => "WIABP"

licensed under cc by-sa 3.0 with attribution.