Ruby gsub字符串中的多个字符

使用Ruby 1.9.3,Rails 3.2,我有以下内容:

"every good boy does fine".gsub("every", "all").gsub("boy", "girl").gsub("fine", "well") # => "all good girl does well" 

有没有更好的方法来写这个? 谢谢。

String#gsubHash#fetch将是这个的好选择。

 a = "every good boy does fine" h = {"every" => "all","boy" => "girl", "fine" =>"well" } a.gsub(/\w+/) { |m| h.fetch(m,m)} # => "all good girl does well" 

要么,

 a = "every good boy does fine" h = {"every" => "all","boy" => "girl", "fine" =>"well" } Regexp.new("^#{h.keys.join('|')}$") # => /^every|boy|fine$/ a.gsub(Regexp.new("^#{h.keys.join('|')}$"),h) # => "all good girl does well" 
 replacements = [ ["every", "all"], ["boy", "girl"],["fine", "well"] replacements.each {|replacement| str.gsub!(replacement[0], replacement[1])} 

我不知道它是否更好,但更清洁。

 subs = { "every" => "all", "boy" => "girl", "fine" => "well" } "every good boy does fine".gsub(/\w+/) { |m| subs[m] || m } # => 'all good girl does well' 

如果目的是避免方法链接:

 [9] pry(main)> "every good boy does fine".gsub("every", "all").gsub("boy", "girl").gsub("fine", "well") => "all good girl does well" [10] pry(main)> "every good boy does fine".gsub(/(every)|(boy)|(fine)/) do |word| [10] pry(main)* case word [10] pry(main)* when "every" [10] pry(main)* "all" [10] pry(main)* when "boy" [10] pry(main)* "girl" [10] pry(main)* when "fine" [10] pry(main)* "well" [10] pry(main)* end [10] pry(main)* end => "all good girl does well" 

或者:

 [11] pry(main)> REPLACEMENT = { "every" => "all", "boy" => "girl", "fine" => "well"} => {"every"=>"all", "boy"=>"girl", "fine"=>"well"} [12] pry(main)> "every good boy does fine".gsub(/(every)|(boy)|(fine)/) { |word| REPLACEMENT[word] } => "all good girl does well" 

这样做:

“每个好男孩都做得很好”.gsub(/ \ w + /,’every’=>’all’,’boy’=>’girl’,’fine’=>’well’)

更容易阅读:)这个简单的问题的一些答案真的让我想知道…哈哈

这里是参考: http : //ruby-doc.org/core-2.1.4/String.html

GG