Ruby多字符串替换怎么做?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (13)
str = "Hello☺ World☹"

预期:

"Hello:) World:("

我能做到:str.gsub("☺", ":)").gsub("☹", ":(")

还有其他方法可以在一个函数调用中完成吗?类似于:

str.gsub(['s1', 's2'], ['r1', 'r2'])
提问于
用户回答回答于

你可以做:

replacements = [ ["☺", ":)"], ["☹", ":("] ]
replacements.each {|replacement| str.gsub!(replacement[0], replacement[1])}

可能会有更高效的解决方案

用户回答回答于

由于Ruby 1.9.2 String#gsub接受散列作为用匹配键替换的第二个参数。可以使用正则表达式来匹配需要替换的子字符串,并将哈希值传递给要替换的值。

这个:

'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*"

扫码关注云+社区