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.

Respostas:


188

verifique o squishmétodo Rails :

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


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(' ')

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."

8

Experimente isto:

s = "Hello, my\n       name is Michael."
s.gsub(/\n\s+/, " ")

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+/, " " )

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.


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+/, " ")

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"

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.