試してみてください。IRBで
line.gsub!(/^([A-Z ]+)/) { |w| w.capitalize }
:
require 'active_support'
'FOO bar'.gsub(/^[A-Z]+/) { |w| w.capitalize }
=> "Foo bar"
またはOPのバージョン:最初の二つの言葉のために
'FOO bar'.gsub!(/^([A-Z ]+)/) { |w| w.capitalize }
=> "Foo bar"
、これは迅速かつ汚いです:
'FOO BAR'.gsub!(/^([A-Z ]+ [A-Z]+)/) { |w| w.capitalize }
=> "Foo bar"
あなたが使用して少しきれいを得ることができます:もちろん
'FOO BAR'.gsub!(/^((?<word>[A-Z]+) \g<word>)/) { |w| w.capitalize }
=> "Foo bar"
、便利な何もしません固定文字列にgsub
の!
バージョンを使用します。
ザ・OPは追加の制約を追加しました:
require 'active_support'
line = 'AFOO BFOO CFOO DFOO e f g'
words = line[/^(?:[A-Z]+)+/].split.map{ |w| w.capitalize } # => ["Afoo", "Bfoo", "Cfoo", "Dfoo"]
[words,line.split[words.size..-1]].join(' ') # => "Afoo Bfoo Cfoo Dfoo e f g"
これは機能しますが、最初の全角文字のみで動作します。最初の2つの単語がすべて大文字である場合に、それを動作させる方法を知っていますか? – zanbri
[]内に空白文字を追加するだけです。彼は彼の例でそれを忘れてしまった。 – oldergod
私もスペースで試しましたが、それはまだ2番目のすべてのキャップの単語のために動作しません。 – zanbri