J'ai une chaîne en Ruby:
sentence = "My name is Robert"
Comment puis-je remplacer n'importe quel mot dans cette phrase facilement sans utiliser de code complexe ou une boucle?
ruby
ruby-on-rails-3
Mithun Sasidharan
la source
la source
my
)?Réponses:
Ne provoquera pas d'exception si le mot remplacé n'est pas dans la phrase (la
[]=
variante le fera).Comment remplacer toutes les instances?
Ce qui précède ne remplace que la première instance de "Robert".
Pour remplacer toutes les instances, utilisez
gsub
/gsub!
(c'est-à-dire "substitution globale"):Ce qui précède remplacera toutes les instances de Robert par Joe.
la source
Si vous avez affaire à du texte en langage naturel et que vous devez remplacer un mot, pas seulement une partie d'une chaîne, vous devez ajouter une pincée d'expressions régulières à votre sous-section car une substitution de texte brut peut entraîner des résultats désastreux:
Les expressions régulières ont des limites de mots, telles que celles
\b
qui correspondent au début ou à la fin d'un mot. Donc,Dans Ruby, contrairement à d'autres langues comme Javascript, les limites de mots sont compatibles UTF-8, vous pouvez donc les utiliser pour les langues avec des alphabets latins non latins ou étendus:
la source
\b
ne fonctionnent pas dedans, vous auriez besoin d'utiliser des analyseurs morphologiques ou des trucs comme ça dans ces cas. Aussi, +1 pour un exemple hilarant.Vous pouvez essayer d'utiliser de cette façon:
La phrase deviendra alors:
la source
IndexError
. Sinon, pour un mot ne faisant pas partie de la phrase, il en résultera:string not matched (IndexError)
Tout d'abord, vous ne déclarez pas le type dans Ruby, vous n'avez donc pas besoin du premier
string
.Pour remplacer un mot dans la chaîne, vous faites:
sentence.gsub(/match/, "replacement")
.la source