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