J'ai une ficelle en rubis:
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?
Vous pouvez essayer d'utiliser cette façon:
sentence ["Robert"] = "Roger"
Alors la phrase deviendra:
sentence = "My name is Roger" # Robert is replaced with Roger
sentence.sub! 'Robert', 'Joe'
Ne provoquera pas d'exception si le mot remplacé ne figure pas dans la phrase (la variante []=
le sera).
Ce qui précède remplace uniquement la première instance de "Robert".
Pour remplacer toutes les instances, utilisez gsub
/gsub!
(c'est-à-dire "substitution globale"):
sentence.gsub! 'Robert', 'Joe'
Ce qui précède remplacera toutes les instances de Robert avec Joe.
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 gsub, car une substitution de texte en clair peut entraîner des résultats désastreux:
'mislocated cat, vindicating'.gsub('cat', 'dog')
=> "mislodoged dog, vindidoging"
Les expressions régulières ont des limites de mot, telles que \b
qui correspond au début ou à la fin d'un mot. Ainsi,
'mislocated cat, vindicating'.gsub(/\bcat\b/, 'dog')
=> "mislocated dog, vindicating"
En Ruby, contrairement à d'autres langages tels que Javascript, les limites de mot sont compatibles UTF-8. Vous pouvez donc l'utiliser pour les langues avec des alphabets non latins ou latins étendus:
'сіль у кисіль, для весіль'.gsub(/\bсіль\b/, 'цукор')
=> "цукор у кисіль, для весіль"
Tout d'abord, vous ne déclarez pas le type en Ruby, vous n'avez donc pas besoin du premier string
.
Pour remplacer un mot dans la chaîne, vous procédez comme suit: sentence.gsub(/match/, "replacement")
.