2012-09-11 148 views
2

我正在使用gsub從文本文件中替換長字符串的部分,例如。用長字符串替換

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

當字符串變長時,ruby返回字符串太長的錯誤。我怎麼解決這個問題?是否有任何可以做同樣工作的gsub替代品?據我所知,gsub會生成原始數據的副本,效率不高。

+0

很難說你實際上在問什麼,但我懷疑它可能適用於'str.gsub! str1,updates' –

+1

@JoshuaCheek:對源代碼的快速回顧表明,將一個字符串傳遞給'gsub'仍然會構建一個正則表達式,所以不會有幫助。如果您好奇,請查看'string.c'中的'get_pat'。 –

+0

是的,看起來你是對的。 –

回答

6

如果str1只是一個字符串,而不是一個正則表達式的片段,那麼你可以做這樣的事情:

str[str1] = updates 

到位與updates取代的strstr1部分。例如:

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

你不得不重複,在某種形式的循環,直到你得到一個IndexError,如果你想在str全部更換str1小號雖然。

正則表達式很棒,但您的工具箱應該不僅僅是一把錘子。

順便說一句,如果str1應該只是一個字符串,那麼在插入正則表達式之前,應該先使用Regexp.escape

+0

謝謝!這樣可行。 Str []方法似乎不使用正則表達式。 –