¿Cómo puedo eliminar la cadena "\ n" de una cadena Ruby?

115

Tengo esta cadena:

"some text\nandsomemore"

Necesito quitarle "\ n". He intentado

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

pero no funciona. ¿Cómo lo hago? Gracias por leer.

ben
fuente

Respuestas:

172

Necesita usar "\n"not '\n'en su gsub. Las diferentes comillas se comportan de manera diferente.

Las comillas dobles "permiten la expansión de caracteres y la interpolación de expresiones, es decir. te permiten usar caracteres de control escapados como \npara representar su verdadero valor, en este caso, nueva línea , y permiten el uso de #{expression}para que puedas tejer variables y, bueno, prácticamente cualquier expresión ruby ​​que te guste en el texto.

Mientras que, por otro lado, las comillas simples 'tratan la cadena literalmente, por lo que no hay expansión, reemplazo, interpolación o lo que sea.

En este caso particular, es mejor utilizar el método String .deleteo .trel método para eliminar las nuevas líneas .

vea aqui para mas informacion

ocodo
fuente
17
la sintaxis adecuada realmente sería .gsub (/ \ n /, "")
boulder_ruby
2
@David tiene razón. Sin embargo, sentí que era importante mostrar que las citas marcan la diferencia, ya que eso beneficiaría a Ben en este momento. Eso sí, David, probablemente sea más una cuestión de estilo que de "correcto". Personalmente creo que tres una mejor opción para esta tarea, pero como digo, pensé que era mejor señalar la diferencia entre comillas simples y dobles cuando respondí.
ocodo
60

Cuando desee eliminar una cadena, en lugar de reemplazarla, puede usar String#delete(o su equivalente mutador String#delete!), por ejemplo:

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

x ahora es igual a "foofoo"

En este caso específico String#deletees más legible que gsubya que en realidad no está reemplazando la cadena con nada.

Paul líder
fuente
3
En Ruby 1.9.3 al menos, deleteno es destructivo como se indica aquí. Devuelve una nueva cadena.
Brent Dillingham
Bien descrito. ¡He actualizado ese fragmento de código para usar la versión del mutador String # delete! en lugar de String # delete
Paul Leader
56

Si desea o no le importa que se eliminen todos los espacios en blanco iniciales y finales de su cadena, puede usar el stripmétodo.

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

como se menciona aquí .

editar El título original de esta pregunta era diferente. Mi respuesta es para la pregunta original.

ThomasW
fuente
2
Esto no responde a la pregunta. stripsolo elimina los espacios en blanco iniciales
thelostspore
1
@mvdanj Sí, dados los detalles de esta pregunta en particular, no la responde, pero responde a la pregunta solo en función del título. Sospecho que es por eso que la gente lo ha encontrado útil.
ThomasW
El título se cambió desde el momento en que respondí originalmente.
ThomasW
29

No necesitas una expresión regular para esto. Utilice tr:

"some text\nandsomemore".tr("\n","")
Mark Thomas
fuente
¿Cuál es la diferencia entre tr an replace?
Arnold Roa
replacesimplemente cambia la cadena a una nueva, como asignación de variable; mientras que tres una búsqueda y reemplazo global carácter por carácter.
Mark Thomas
19

uso chompo stripfunciones de Ruby:

"abcd\n".chomp => "abcd"
"abcd\n".strip => "abcd"
Mateo Vidal
fuente
2
Esto no responde a la pregunta. stripsolo elimina los espacios en blanco iniciales
thelostspore
2
chomp es la mejor manera ... no puedo creer que esto tenga menos votos positivos
user1735921
en el método chomp, \ n y \ r se eliminan del final de str si existen, no en el medio. Entonces esto no resuelve la pregunta de OP
silva96