2011-11-01 12 views

risposta

86

Uso #sub:

a.sub('bar', "BAR") 
+3

grazie! stavo usando gsub() che sostituisce tutte le occorrenze. – Sayuj

11

String#sub è quello che ti serve, come già detto Yossi. Ma Userei di un'espressione regolare, invece, dal momento che è più veloce:

a = 'foobarfoobarhmm' 
output = a.sub(/foo/, 'BAR') 
+0

Ho appena fatto un benchmark e la regex impiega il 50% in più rispetto all'utilizzo di una stringa come parametro per sub. –

+0

L'ho controllato e la versione di Regexp è più veloce. Ho usato MRI 1.9.2, 1.9.3, 2.0.0 e persino JRuby, essendo tutti più veloci nella versione Regexp. Il codice di riferimento: https://gist.github.com/tbuehlmann/5574713 Vuoi fornire il tuo punto di riferimento? – tbuehlmann

+0

Hmmmm. Devo scusarmi per la mia affermazione, sembra che ho commesso un errore nel mio benchmark. La regex è in realtà più veloce. –

5

per sostituire la prima occorrenza, solo fare questo:

str = "Hello World" 
str['Hello'] = 'Goodbye' 
# the result is 'Goodbye World' 

si può anche usare le espressioni regolari:

str = "I have 20 dollars" 
str[/\d+/] = 500.to_s 
# will give 'I have 500 dollars' 
+0

'500.to_s' a volte viene scritto' "500" '. :-) –

+1

L'ho scritto così intenzionalmente. per indicare che è necessario assegnare una stringa esplicita. Perché la conversione non è automatica qui. Se lo fai invece 'str [/ \ d + /] = 500' riceverai un errore' TypeError: nessuna conversione implicita di Fixnum in String'. –

Problemi correlati