String#gsub保持大小写?

时间:2015-11-20 01:04:53

标签: ruby regex string gsub

使用gsub时,是否可以维护案例?

这是一个有效的例子,可以在不调用gsub两次的情况下执行此操作吗?也许在正则表达式中添加不区分大小写的i

 'Strings'.gsub(/s/, 'z').gsub(/S/, 'Z') #=> Ztringz

目标(显然不起作用):

'Strings'.gsub(/s/i, 'z') #=> Ztringz

2 个答案:

答案 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"