7
votes

Rubis - parenthèse d'évacuation

Je ne peux pas pour la vie de moi figurer cela, même si cela devrait être très simple.

Comment puis-je remplacer toutes les occurrences de "(" et ") " sur une chaîne avec " \ (" et " \ \) "?

rien ne semble fonctionner: < Pré> xxx

aucune idée?


0 commentaires

4 Réponses :


1
votes

dans une chaîne créée avec des guillemets doubles, \ échappe au caractère suivant. Donc, afin d'obtenir une barre oblique inverse dans la chaîne, vous devez échapper à la barre oblique inverse elle-même: "\\ (" . Ou vous pouvez simplement utiliser une chaîne unique indiquée, qui fait moins de prétraitement: '\ (' .


0 commentaires

1
votes

"foo (bar) foo" .gsub ("(", "\\\\\ (") fonctionne. Si vous essayez probablement dans la console, vous voyez probablement le \\ ( String car la console génère la chaîne avec inspecter, qui échappe à \

Essayez avec: met "foo (bar) foo" .gsub ("(", "\\ (") et vous verrez


0 commentaires

5
votes

Vous avez déjà la solution avec votre deuxième tentative, vous venez d'être confondu car la chaîne est affichée sous forme évasée dans l'interprète interactif. Mais vraiment il n'y a qu'une seule barre oblique inverse il n'y a pas deux. Essayez d'imprimer en utilisant des puts et vous verrez qu'il n'y a qu'une seule barre oblique inverse: xxx pré>

Si vous avez besoin d'une conversation plus convaincante, essayez de prendre la longueur de la chaîne: P>

> "foo ( bar ) foo".length
=> 15
> "foo ( bar ) foo".gsub("(", "\\(").length
=> 16


0 commentaires

3
votes

Voici ce que je viens de remplacer les deux parents dans un appel: xxx


0 commentaires