2
나는 루비를 사용하여 문자열의 첫 글자를 얻으려고했다. 다음은 내가 쓴 것입니다.루프없이 루비의 문자열에서 단어의 첫 글자를 추출하는 방법은 무엇입니까?
puts "world is a better place".split.collect{|w| w[0].capitalize}.join()
동일한 결과를 산출하는 훨씬 더 간결한 방법이 있습니까?
나는 루비를 사용하여 문자열의 첫 글자를 얻으려고했다. 다음은 내가 쓴 것입니다.루프없이 루비의 문자열에서 단어의 첫 글자를 추출하는 방법은 무엇입니까?
puts "world is a better place".split.collect{|w| w[0].capitalize}.join()
동일한 결과를 산출하는 훨씬 더 간결한 방법이 있습니까?
정규 표현식을 사용하여 :
"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
는 단어 경계와 일치합니다. (단어 문자와 단어가 아닌 문자 사이). [a-z]
은 알파벳과 일치합니다.
\b[a-z]
은 첫 번째 영문자와 일치합니다.
참고 알파벳이 아닌 문자로 시작하는 단어 (?)가 있으면 위의 코드는 작동하지 않습니다. 또한 구두점이 포함 된 단어가 있으면 작동하지 않습니다. 공백이나 하이픈이있는 단어가있는 경우뿐만 아니라
"world is a better place".gsub(/\s*(\S)\S*/, '\1').upcase
# => "WIABP"
참고 : (예 :
World is 1 better-place.
)UPDATE
그룹을 캡처와
String#gsub
을 사용하여 동일한 결과를 얻을 수 그 안에. – sawa@sawa, 지적 해 주셔서 감사합니다. 나는 그것을 메모에 추가했다. 또한 대체 솔루션을 추가했습니다. – falsetru