Ruby gsub multiple characters in string

前端 未结 5 1616
野趣味
野趣味 2020-12-09 09:47

Using Ruby 1.9.3, Rails 3.2, I have the following:

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


        
5条回答
  •  生来不讨喜
    2020-12-09 10:05

    String#gsub and Hash#fetch will be the good choice for this.

    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"
    

    or,

    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"
    

提交回复
热议问题