Supprimer plusieurs espaces et nouvelles lignes à l'intérieur de String

104

Supposons que nous ayons une chaîne comme celle-ci:

Hello, my\n       name is Michael.

Comment puis-je supprimer cette nouvelle ligne et supprimer ces espaces après cela en un à l'intérieur de la chaîne pour obtenir cela?

Hello, my name is Michael.
Kreeki
la source

Réponses:

188

Découvrez la squishméthode Rails :

http://apidock.com/rails/String/squish

socjopata
la source
6
La solution la plus simple et la plus élégante. Merci. Mais il y a une chose, cette méthode est définie dans Rails, donc elle ne fonctionnera que dans les applications Rails, heureusement c'est mon cas.
Kreeki
4
Comme Kreeki l'a dit un peu de manière peu claire, il s'agit d'une méthode Rails, pas d'une méthode Ruby.
17
Pour un contexte non-Rails, utilisez some_string.strip.gsub(/\s+/, " ")ce que fait exactement squish.
rapcal
1
Je vous remercie! Je ne savais passquish
Francois
38

Pour illustrer Rubys intégré dans Squeeze :

string.gsub("\n", ' ').squeeze(' ')
Steenslag
la source
3
Soyez juste conscient: squeeze compressera TOUTES les chaînes qui viennent en séries de plusieurs caractères. Alors "Squeeze my application's copy" .squeeze => "Squeze my application's copy"
charliepark
8
Mais squeeze(' ')serre juste les espaces. "Squeeze my application's copy".squeeze(' ') => "Squeeze my application's copy".
steenslag du
22

Le moyen le plus simple serait probablement

s = "Hello, my\n       name is Michael."
s.split.join(' ') #=> "Hello, my name is Michael."
Koraktor
la source
8

Essaye ça:

s = "Hello, my\n       name is Michael."
s.gsub(/\n\s+/, " ")
anusha
la source
C'est en fait la meilleure réponse "rubis uni", et fonctionne correctement pour supprimer les espaces de début d'une chaîne multiligne.
Koen.
5
my_string = "Hello, my\n       name is Michael."
my_string = my_string.gsub( /\s+/, " " )
fl00r
la source
il aimerait également supprimer l' \nidéal (je pense) qu'il devrait être remplacé par un espace dans le cas de quelque chose comme"Hello,\nMy name is Michael"
Ali
4

cette expression régulière remplacera l'instance de 1 ou plusieurs espaces blancs par 1 espace blanc, ps \sremplacera tous les caractères d'espaces blancs qui incluent \s\t\r\n\f:

a_string.gsub!(/\s+/, ' ')

De même pour le retour chariot uniquement

str.gsub!(/\n/, " ")

Tout d'abord, remplacez tout \npar un espace blanc, puis utilisez l'expression régulière remove multiple white space.

Ali
la source
Merci! Cela a fonctionné pour mes besoins pour supprimer plusieurs espaces mais maintenir un seul espace entre les mots.
Acoustic_north
3

Utilisez String # gsub :

s = "Hello, my\n       name is Michael."
s.gsub(/\s+/, " ")
Nikola
la source
la sortie ne serait pas correcte dans le cas de "Hello,\nMy name is Michael". Idéalement, vous voudriez un espace où il y a un\n
Ali
1
Use squish
currency = " XCD"
str = currency.squish
 str = "XCD" #=> "XCD"
vikas copain
la source