web-dev-qa-db-fra.com

Comment puis-je supprimer la chaîne "\ n" d'une chaîne Ruby?

J'ai cette ficelle:

"some text\nandsomemore"

Je dois enlever le "\ n" de celui-ci. J'ai essayé

"some text\nandsomemore".gsub('\n','')

mais ça ne marche pas. Comment fait-on ça? Merci d'avoir lu.

107
ben

Vous devez utiliser "\n" ne pas '\n' dans votre gsub. Les différents guillemets se comportent différemment.

Double citation " autorise le développement des caractères et l’interpolation d’expression, c.-à-d. ils vous permettent d'utiliser des caractères de contrôle échappés comme \n pour représenter leur valeur réelle, dans ce cas, newline , et permettre l’utilisation de #{expression} afin que vous puissiez tisser des variables et, ainsi, à peu près n'importe quelle expression Ruby que vous préférez dans le texte).

Par contre, les guillemets simples ' traite la chaîne littéralement, de sorte qu'il n'y ait pas d'expansion, de remplacement, d'interpolation ou autre.

Dans ce cas particulier, il vaut mieux utiliser soit le .delete ou .tr Méthode de chaîne pour supprimer les nouvelles lignes .

Voir ici pour plus d'infos

158
ocodo

Lorsque vous souhaitez supprimer une chaîne plutôt que de la remplacer, vous pouvez utiliser String#delete _ (ou son équivalent mutateur String#delete!), par exemple.:

x = "foo\nfoo"
x.delete!("\n")

x est maintenant égal à "foofoo"

Dans ce cas particulier String#delete est plus lisible que gsub puisque vous ne remplacez pas réellement la chaîne.

55
Paul Leader

Si vous voulez ou que cela ne vous dérange pas de supprimer tous les espaces de début et de fin de votre chaîne, vous pouvez utiliser la méthode strip.

"    hello    ".strip   #=> "hello"   
"\tgoodbye\r\n".strip   #=> "goodbye"

comme mentionné ici .

edit Le titre original de cette question était différent. Ma réponse est pour la question initiale.

48
ThomasW

Vous n'avez pas besoin d'une regex pour cela. Utilisez tr:

"some text\nandsomemore".tr("\n","")
29
Mark Thomas

utilisez les fonctions chomp ou strip de Ruby:

"abcd\n".chomp => "abcd"
"abcd\n".strip => "abcd"
17
Mateo Vidal
2
icyrock.com