a = "foobarfoobarhmm"
Rubino - sostituire la prima occorrenza di un sottostringa con un'altra stringa
voglio l'uscita come ` "fooBARfoobarhmm"
cioè solo la prima occorrenza di "bar" dovrebbe essere sostituito con "BAR".
a = "foobarfoobarhmm"
Rubino - sostituire la prima occorrenza di un sottostringa con un'altra stringa
voglio l'uscita come ` "fooBARfoobarhmm"
cioè solo la prima occorrenza di "bar" dovrebbe essere sostituito con "BAR".
Uso #sub
:
a.sub('bar', "BAR")
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')
Ho appena fatto un benchmark e la regex impiega il 50% in più rispetto all'utilizzo di una stringa come parametro per sub. –
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
Hmmmm. Devo scusarmi per la mia affermazione, sembra che ho commesso un errore nel mio benchmark. La regex è in realtà più veloce. –
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'
'500.to_s' a volte viene scritto' "500" '. :-) –
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'. –
grazie! stavo usando gsub() che sostituisce tutte le occorrenze. – Sayuj