2

gsub を使用して、テキスト ファイルから長い文字列の一部を置き換えていました。

      str.gsub!(/#{str1}/){"#{updates}"}

文字列が長くなると、ruby が文字列が長すぎるというエラーを返しました。どうすればこの問題を解決できますか? 同じ作業を行うことができるgsubの代替品はありますか? 私の知る限り、gsub は元のデータのコピーを作成しますが、これは非効率的です。

4

1 に答える 1

6

str1が正規表現フラグメントではなく単なる文字列の場合、次のようなことができます。

str[str1] = updates

str1の部分をstr所定の位置に置き換えupdatesます。例えば:

>> s = 'Where is X house?'
=> "Where is X house?"
>> s['X'] = 'pancakes'
=> "pancakes"
>> s
=> "Where is pancakes house?"

str1ただし、すべてのsを置き換えたい場合は、 IndexError が発生するまで、何らかのループでそれを繰り返す必要がstrあります。

正規表現は優れていますが、ツールボックスにはハンマー以上のものを用意する必要があります。

ところで、str1が単なる文字列であると想定されている場合はRegexp.escape、正規表現に補間する前に使用する必要があります。

于 2012-09-11T23:41:36.960 に答える