我想创建一个Ruby模式来替换除最后一个字母之外的所有字符。
例如,替换所有:
"}"
字符串:
"} something "
转动此字符串:
"{ anything } { anything } { anything }"
为:
"{ anything } something { anything } something { anything }"
编辑:
到目前为止我用过的东西:
replaceString = "} something"
string.gsub("}", replaceString).reverse.sub(replaceString.reverse, "}").reverse
但我认为它不是很有效。
答案 0 :(得分:2)
你可以使用积极的前瞻:
str = "{ anything } { anything } { anything }"
pattern = /\}(?=.*\})/
str.gsub(pattern, "} Something")
=> "{ anything } Something { anything } Something { anything }"
答案 1 :(得分:2)
在我的另一个答案中,我没有告诉你正则表达式对于这样一个简单的问题是一种矫枉过正,更不用说它可能是最慢的解决方案。
我更喜欢这样一个简单的定制解决方案:
def replace_all_but_last str, substr1, substr2
str.dup.tap { |result|
index = str.rindex substr1
result[0...index] = result[0...index].gsub(substr1, substr2)
}
end
str = "{ anything } { anything } { anything }"
replace_all_but_last str, "}", "} something"