Como posso remover a string “\ n” de uma string Ruby?


115

Eu tenho esta string:

"some text\nandsomemore"

Eu preciso remover o "\ n" dele. eu tentei

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

mas não funciona. Como eu faço isso? Obrigado pela leitura.

Respostas:


172

Você precisa usar "\n"não '\n'em sua gsub. As diferentes marcas de aspas se comportam de maneira diferente.

As aspas duplas "permitem expansão de caracteres e interpolação de expressões, ou seja. eles permitem que você use caracteres de controle de escape \npara representar seu verdadeiro valor, neste caso, nova linha , e permitem o uso de #{expression}para que você possa tecer variáveis ​​e, bem, praticamente qualquer expressão ruby ​​que você quiser no texto.

Enquanto, por outro lado, as aspas simples 'tratam a string literalmente, então não há expansão, substituição, interpolação ou o que quer que seja.

Nesse caso específico, é melhor usar o método .deleteou .trString para excluir as novas linhas .

Veja aqui para mais informações


17
a sintaxe adequada seria realmente .gsub (/ \ n /, "")
boulder_ruby

2
@David está correto. No entanto, achei que era importante mostrar que as citações fazem diferença, já que isso beneficiaria Ben neste momento. Veja bem, David, provavelmente é mais uma questão de estilo do que "correto". Pessoalmente, acho que tré a melhor escolha para essa tarefa, mas, como disse, achei melhor apontar a diferença entre aspas simples e duplas quando respondi.
ocodo

60

Quando você quiser remover uma string, em vez de substituí-la, você pode usar String#delete(ou seu equivalente mutador String#delete!), por exemplo:

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

x agora é igual a "foofoo"

Neste caso específico, String#deleteé mais legível do que gsubporque você não está realmente substituindo a string por nada.


3
No Ruby 1.9.3, pelo menos, deletenão é destrutivo como indicado aqui. Ele retorna uma nova string.
Brent Dillingham

Bem localizado. Eu atualizei esse trecho de código para usar a versão modificadora String # delete! em vez de String # delete
Paul Leader

56

Se você quiser ou não se importar em ter todos os espaços em branco à esquerda e à direita de sua string removidos, você pode usar o stripmétodo.

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

conforme mencionado aqui .

editar O título original desta questão era diferente. Minha resposta é para a pergunta original.


2
Isso não responde à pergunta. stripremove apenas os espaços em branco à esquerda e à direita: ruby-doc.org/core-1.9.3/String.html#method-i-strip-21
thelostspore

1
@mvdanj Sim, dados os detalhes desta questão em particular não a responde, mas responde à questão apenas com base no título. Suspeito que seja por isso que as pessoas o consideram útil.
ThomasW

O título foi alterado desde o momento em que respondi originalmente.
ThomasW

29

Você não precisa de um regex para isso. Use tr:

"some text\nandsomemore".tr("\n","")

qual é a diferença entre tr an replace?
Arnold Roa

replaceapenas muda a string para uma nova, como atribuição de variável; enquanto tré um localizar e substituir global caractere por caractere.
Mark Thomas,

19

uso chompou stripfunções do Ruby:

"abcd\n".chomp => "abcd"
"abcd\n".strip => "abcd"

2
Isso não responde à pergunta. stripremove apenas espaços em branco à esquerda e à direita - ruby-doc.org/core-1.9.3/String.html#method-i-strip-21
thelostspore

2
chomp é a melhor maneira ... não posso acreditar que isso tem menos
votos positivos

no método chomp, \ n e \ r são removidos do final de str se existirem, não no meio. Portanto, isso não resolve a questão do OP
silva96

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.