0

我想创建一个 Ruby 模式来替换除最后一个字母之外的所有字母。

例如,全部替换:

"}" 

用字符串:

"} something "

转动这个字符串:

"{ anything }   { anything } { anything }"

到:

"{ anything } something    { anything } something  { anything }"

编辑:

到目前为止我用过的:

replaceString = "} something"
string.gsub("}", replaceString).reverse.sub(replaceString.reverse, "}").reverse

但我认为它不是很有效。

4

2 回答 2

2

您可以使用积极的前瞻:

str = "{ anything }   { anything } { anything }"
pattern = /\}(?=.*\})/
str.gsub(pattern, "} Something")

=> "{ anything } Something   { anything } Something { anything }"
于 2012-07-25T18:20:32.210 回答
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"
于 2012-07-25T20:05:16.543 回答