1. ホーム
  2. ruby

[解決済み] Rubyの複数文字列置換

2023-05-15 12:36:08

質問

str = "Hello☺ World☹"

期待される出力は

"Hello:) World:("

こんなこともできるんだ str.gsub("☺", ":)").gsub("☹", ":(")

私は単一の関数呼び出しでこれを行うことができますので、他の方法はありますか?例えば

str.gsub(['s1', 's2'], ['r1', 'r2'])

どのように解決するのですか?

Ruby 1.9.2以降。 String#gsub は、マッチしたキーで置換するための第2パラメータとしてhashを受け付けます。正規表現で置換すべき部分文字列をマッチさせ、置換される値としてhashを渡すことができます。

こんな感じ。

'hello'.gsub(/[eo]/, 'e' => 3, 'o' => '*')    #=> "h3ll*"
'(0) 123-123.123'.gsub(/[()-,. ]/, '')    #=> "0123123123"

Ruby 1.8.7では、ブロックを使って同じことを実現します。

dict = { 'e' => 3, 'o' => '*' }
'hello'.gsub /[eo]/ do |match|
   dict[match.to_s]
 end #=> "h3ll*"