Ho una stringa in Ruby:
sentence = "My name is Robert"
Come posso sostituire facilmente una parola in questa frase senza usare un codice complesso o un ciclo?
Ho una stringa in Ruby:
sentence = "My name is Robert"
Come posso sostituire facilmente una parola in questa frase senza usare un codice complesso o un ciclo?
Risposte:
sentence.sub! 'Robert', 'Joe'
Non causerà un'eccezione se la parola sostituita non è nella frase (la []=
variante lo farà).
Quanto sopra sostituisce solo la prima istanza di "Robert".
Per sostituire tutte le istanze usare gsub
/ gsub!
(es. "Sostituzione globale"):
sentence.gsub! 'Robert', 'Joe'
Quanto sopra sostituirà tutte le istanze di Robert con Joe.
Se hai a che fare con un testo in linguaggio naturale e devi sostituire una parola, non solo una parte di una stringa, devi aggiungere un pizzico di espressioni regolari al tuo gsub poiché una semplice sostituzione del testo può portare a risultati disastrosi:
'mislocated cat, vindicating'.gsub('cat', 'dog')
=> "mislodoged dog, vindidoging"
Le espressioni regolari hanno confini di parole, come ad esempio \b
quali corrispondenze iniziano o finiscono di una parola. Così,
'mislocated cat, vindicating'.gsub(/\bcat\b/, 'dog')
=> "mislocated dog, vindicating"
In Ruby, a differenza di altre lingue come Javascript, i confini delle parole sono compatibili con UTF-8, quindi puoi usarlo per le lingue con alfabeti latini non latini o estesi:
'сіль у кисіль, для весіль'.gsub(/\bсіль\b/, 'цукор')
=> "цукор у кисіль, для весіль"
\b
non funzionano in esse, in quei casi dovrai usare analizzatori morfologici o cose del genere. Inoltre, +1 per un esempio divertente.
Puoi provare ad usare in questo modo:
sentence ["Robert"] = "Roger"
Quindi la frase diventerà:
sentence = "My name is Roger" # Robert is replaced with Roger
IndexError
. In caso contrario, per una parola che non fa parte della frase si avrà:string not matched (IndexError)
my
)?