Remova vários espaços e novas linhas dentro da String

104

Suponha que tenhamos uma string como esta:

Hello, my\n       name is Michael.

Como posso remover essa nova linha e separar os espaços depois disso em um dentro da string para conseguir isso?

Hello, my name is Michael.
Kreeki
fonte

Respostas:

188

verifique o squishmétodo Rails :

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

socjopata
fonte
6
A solução mais simples e elegante. Obrigado. Mas tem uma coisa, esse método é definido em Rails, então funcionará apenas em aplicações Rails, felizmente é o meu caso.
Kreeki
4
Como Kreeki disse sem muita clareza, este é um método Rails, não um método Ruby.
17
Para um contexto não-Rails, use some_string.strip.gsub(/\s+/, " ")exatamente o que o squish faz.
rapcal
1
Obrigado! Não sabia sobresquish
François
38

Para ilustrar o Rubys embutido no squeeze :

string.gsub("\n", ' ').squeeze(' ')
Steenslag
fonte
3
Esteja ciente: squeeze irá compactar TODAS as strings que vêm em execuções de vários caracteres. Então, "Squeze my application's copy" .squeeze => "Squeze my aplication's copy"
charliepark
8
Mas squeeze(' ')apenas aperta os espaços. "Squeeze my application's copy".squeeze(' ') => "Squeeze my application's copy".
steenslag
22

A maneira mais simples provavelmente seria

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

Experimente isto:

s = "Hello, my\n       name is Michael."
s.gsub(/\n\s+/, " ")
anusha
fonte
Esta é realmente a melhor resposta "rubi simples" e funciona corretamente para remover espaços iniciais de uma string de várias linhas.
Koen.
5
my_string = "Hello, my\n       name is Michael."
my_string = my_string.gsub( /\s+/, " " )
fl00r
fonte
ele também gostaria de remover o \nidealmente (eu sinto) que deveria ser substituído por um espaço no caso de algo como"Hello,\nMy name is Michael"
Ali
4

esta regex substituirá a instância de 1 ou mais espaços em branco por 1 espaço em branco, o ps \ssubstituirá todos os caracteres de espaço em branco que incluem \s\t\r\n\f:

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

Da mesma forma, apenas para retorno de carro

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

Primeiro, substitua tudo \npor espaço em branco e, em seguida, use a expressão regular para remover vários espaços em branco.

Todos
fonte
Obrigado! Isso funcionou para meus objetivos de remover vários espaços, mas manter um espaço único entre as palavras.
acoustic_north
3

Use String # gsub :

s = "Hello, my\n       name is Michael."
s.gsub(/\s+/, " ")
Nikola
fonte
a saída não seria correta no caso de "Hello,\nMy name is Michael". O ideal seria um espaço onde houvesse um\n
Ali
1
Use squish
currency = " XCD"
str = currency.squish
 str = "XCD" #=> "XCD"
vikas amigo
fonte