Ruby on rails Ruby gsub字符串中的多个字符
使用Ruby 1.9.3和Rails 3.2,我有以下几点:Ruby on rails Ruby gsub字符串中的多个字符,ruby-on-rails,ruby,Ruby On Rails,Ruby,使用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" 有没有更好的方法写这个?谢谢 replacements = [ ["every", "all"], ["boy", "girl"],["fine", "well"] replacements
"every good boy does fine".gsub("every", "all").gsub("boy", "girl").gsub("fine", "well")
# => "all good girl does well"
有没有更好的方法写这个?谢谢
replacements = [ ["every", "all"], ["boy", "girl"],["fine", "well"]
replacements.each {|replacement| str.gsub!(replacement[0], replacement[1])}
我不知道它是否更好,但是更干净。这将是很好的选择
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"
或者
如果目的是避免方法链接:
[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+/,“每个”=>“所有”,“男孩”=>“女孩”,“好”=>“很好”)
更容易阅读:)
这个简单问题的一些答案真的让我好奇…哈哈
以下是参考资料:
gg
subs[m]| | m
远远好于h.has_key?(m)?h[m]:m
。。我忘了,但你提醒我:)subs.default\u proc=->(h,k){k}
是另一个选项,那么你可以说{m | subs[m]}
并隐藏default\u proc
@muistooshort More better isa.gsub(/\w+/){m | h.fetch(m,m)}
:)看看我的编辑。巧妙地使用了Regexp union
,但是'no-finerboy(Regexp.union(*h.keys),h)
->“没有好女孩”
我发现我最初的方法虽然不是最好的,但更具可读性。不过,感谢您的指导。:)
[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"
subs = { "every" => "all", "boy" => "girl", "fine" => "well" }
"every good boy does fine".gsub(/\w+/) { |m| subs[m] || m }
# => 'all good girl does well'