使用gsub
时,是否可以维护案例?
这是一个有效的例子,可以在不调用gsub
两次的情况下执行此操作吗?也许在正则表达式中添加不区分大小写的i
?
'Strings'.gsub(/s/, 'z').gsub(/S/, 'Z') #=> Ztringz
目标(显然不起作用):
'Strings'.gsub(/s/i, 'z') #=> Ztringz
答案 0 :(得分:4)
如何使用String#tr
:
'Strings'.tr('sS', 'zZ')
# => "Ztringz"
答案 1 :(得分:1)
使用String#gsub的三种方式:
使用块和简单的条件表达式
'Strings'.gsub(/s/i) { |str| str=='s' ? 'z' : 'Z' }
#=> "Ztringz"
使用块和ASCII值偏移
offset = 'z'.ord-'s'.ord
#=> 7
'Strings'.gsub(/s/i) { |str| (str.ord + offset).chr }
#=> "Ztringz"
也可以写成块:
{ ($&.ord + offset).chr }
使用默认值的哈希
'Strings'.gsub(/s/i, Hash.new { |_,k| k }.update('s'=>'z', 'S'=>'Z'))
#=> "Ztringz"