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

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


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.


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.


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

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

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.