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.

ben
fonte

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

ocodo
fonte
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.

Paul Leader
fonte
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.

ThomasW
fonte
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","")
Mark Thomas
fonte
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"
Mateo Vidal
fonte
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