Ruby模式匹配除最后一个之外的所有

Ruby模式匹配除最后一个之外的所有,ruby,replace,Ruby,Replace,我想创建一个Ruby模式来替换除了最后一个字母以外的所有字母 例如,替换所有: "}" 使用字符串: "} something " 转动此字符串: "{ anything } { anything } { anything }" 致: 编辑: 到目前为止,我使用的是: replaceString = "} something" string.gsub("}", replaceString).reverse.sub(replaceString.reverse, "}").reverse

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

例如,替换所有:

"}" 
使用字符串:

"} something "
转动此字符串:

"{ anything }   { anything } { anything }"
致:

编辑:

到目前为止,我使用的是:

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

但是我认为它不是很有效。

你可以使用积极的前瞻:

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

=> "{ anything } Something   { anything } Something { anything }"

您可以使用正向前瞻:

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

=> "{ anything } Something   { anything } Something { anything }"

在我的另一个回答中,我没有告诉你,对于这样一个简单的问题来说,正则表达式是一种过度的技巧,更不用说它可能是最慢的解决方案了

我更喜欢这样一个简单的定制解决方案:

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"

在我的另一个回答中,我没有告诉你,对于这样一个简单的问题来说,正则表达式是一种过度的技巧,更不用说它可能是最慢的解决方案了

我更喜欢这样一个简单的定制解决方案:

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"

我们鼓励你这样做。如果您有,请将其添加到问题中-如果没有,请先研究并尝试您的问题,然后再回来。我们鼓励您这样做。如果您有,请将其添加到问题中-如果没有,请先研究并尝试您的问题,然后返回。这只适用于一行,如果字符串中有任何“\n”,则它不适用于多行使用
pattern=/\}(?=.\})/m
这只适用于一行,如果字符串中有任何'\n',它不适用于多行使用
pattern=/\}(?=.*\})/m