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 に答える