只使用Ruby regex gsub一次

只使用Ruby regex gsub一次,ruby,regex,string,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') 以上给出了所需的输出。但是我想知道我是否只

我有下面的字符串

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   "
接受可选块:块的返回值用作替换字符串:

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   "
接受可选块:块的返回值用作替换字符串:

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   "
你也可以使用散列

melody.gsub(/[CDFGA]#/, {'C#' => 'c', 'D#' => 'd', 'F#' => 'f', 'G#' => 'g', 'A#' => 'a'})
你也可以使用散列

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

进行小写转换..同时替换.简短且甜蜜+1:)您可以使用反向引用在没有块的情况下执行此操作吗?@CarySwoveland,不,我不能。@CarySwoveland这里是,为什么不可能…在替换时执行小写转换..。简短而甜美+1:)你能使用反向引用在没有块的情况下执行此操作吗?@CarySwoveland,不,我不能。@CarySwoveland这里是,为什么不可能…我不认为这是这种情况下最有效的解决方案,但它有助于你演示如何执行更一般的替换。是的,它不短,但是,如果你的替换与匹配无关,则更一般。我不认为这是这种情况下最有效的解决方案,但如果你演示了如何进行更一般的替换,则会很有用。是的,它不短,但如果你的替换与匹配无关,则更一般。