仅使用Ruby regex gsub一次

时间:2014-06-07 05:57:27

标签: ruby regex string

我有以下字符串。

melody = "F# G# A# B |A# G# F#   |A# B C# D# |C# B A#   |F#   F#   
         |F#   F#   |F#F#G#G#A#A#BB|A# G# F#   "

我想将F#转换为f,将G#转换为g等。

melody.gsub(/C#/, 'c').gsub(/D#/,'d').gsub(/F#/,'f').gsub(/G#/,'g').gsub(/A#/,'a')

以上给出了所需的输出。但我想知道我是否只能使用gsub一次。

"f g a B |a g f   |a B c d |c B a   |f   f   |f   f   |ffggaaBB|a g f   "

2 个答案:

答案 0 :(得分:4)

String#gsub接受一个可选块:块的返回值用作替换字符串:

melody.gsub(/[CDFGA]#/) { |x| x[0].downcase }
# => "f g a B |a g f   |a B c d |c B a   |f   f   |f   f   |ffggaaBB|a g f   "

答案 1 :(得分:1)

您也可以使用哈希。

melody.gsub(/[CDFGA]#/, {'C#' => 'c', 'D#' => 'd', 'F#' => 'f', 'G#' => 'g', 'A#' => 'a'})