2009-11-19 2 views
11

J'ai un problème avec la chaîne de remplacement dans Ruby.Comment ruby ​​peut-il effectuer cette tâche (recherche et remplacement de chaîne insensible à la casse dans Ruby)?

Mon texte original: Ce que l'humain n'aime pas, c'est ce que l'animal fait.

Je veux remplacer à: == Quoi == l'humain n'est pas comme == quoi == animal fait.

Je suis confronté au problème de la casse lorsque vous utilisez gsub. (par exemple, quoi, quoi) Je veux conserver le texte original.

une solution?

+2

Un meilleur titre pourrait être, « string insensible cas Rechercher et remplacer dans Ruby ». Changer le titre à quelque chose comme ça pourrait vous aider à obtenir plus de gens à regarder votre question. – donut

Répondre

20

Si je vous ai bien compris c'est ce que vous voulez faire:

puts "What the human does is not like what animal does.".gsub(/(what)/i, '==\1==') 

qui sortira

== == Qu'est-ce que l'humain n'est pas comme == == ce que l'animal fait.

+0

Exemple mis à jour en utilisant l'indicateur insensible à la casse à l'expression rationnelle comme suggéré par brianegge. – hallski

2

Utilisez le block form of gsub.

"What the human does is not like what animal does.".gsub(/(what)/i) { |s| "==#{s}==" } 
=> "==What== the human does is not like ==what== animal does." 
+0

J'écrivais exactement la même chose. Voici la documentation de gsub: http://ruby-doc.org/core/classes/String.html#M000817 –

+0

Lien mis à jour: http://ruby-doc.org/core-2.3.3/String.html# méthode-i-gsub – Josh

2

une autre version sans parenthèses() dans regex,

puts "What the human does is not like what animal does.".gsub(/what/i,'==\0==') 

== == Qu'est-ce que l'humain n'est pas comme == == ce que l'animal fait.

3

La chose importante à prendre en compte dans les 3 réponses jusqu'à présent, est l'utilisation du modificateur "i" sur l'expression régulière. C'est la manière abrégée de spécifier l'utilisation de l'option Regexp::IGNORECASE.

Un tutoriel utile Ruby est Regexp here et la classe est documentée here