2010-11-16 13 views

Respuesta

130

Es necesario utilizar "\n" no '\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. le permiten usar caracteres de control escapados como \n para representar su verdadero valor, en este caso, nueva línea, y permitir el uso de #{expression} para que pueda tejer variables y, bueno, casi cualquier expresión de rubí que desee 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 usar el método de .delete o .tr cadena a eliminar los saltos de línea .

See here for more info

+12

sintaxis correcta sería realmente.gsub (/ \ n /, "") –

+2

@David es correcto. Sin embargo, sentí que era importante mostrar que las citas hacen una diferencia, ya que eso beneficiaría a Ben en este punto. Eso sí, David, probablemente sea más una cuestión de estilo que "correcto". Personalmente creo que 'tr' es una mejor opción para esta tarea, pero como digo, pensé que era mejor señalar la diferencia en comillas simples cuando respondí. – ocodo

19

No es necesario una expresión regular para esto. Uso tr:

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

Cuando se desea eliminar una cadena, en lugar de reemplazarlo puede utilizar String#delete (o su mutador equivalente String#delete!), por ejemplo:

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

x ahora es igual a "foofoo"

En este caso específico, String#delete es más legible que gsub ya que en realidad no está reemplazando la cadena con nada.

+3

En Ruby 1.9.3 al menos, 'delete' no es destructivo como se indica aquí. Devuelve una nueva cadena. –

+0

Bien manchado. Actualicé ese fragmento de código para usar la versión mutadora String # delete! en lugar de String # delete –

29

Si desea o no le molesta que se eliminen todos los espacios en blanco iniciales y finales de la cadena, puede utilizar el método strip.

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

como se menciona here.

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

+2

Esto no responde la pregunta. 'strip' solo elimina los espacios en blanco iniciales y finales: http://ruby-doc.org/core-1.9.3/String.html#method-i-strip-21 – thelostspore

+0

@mvdanj Sí, dados los detalles de esta pregunta en particular, no responde, pero responde la pregunta simplemente en función del título. Sospecho que es por eso que las personas lo han encontrado útil. – ThomasW

+0

El título fue cambiado desde el momento en que respondí originalmente. – ThomasW

10

uso chomp o strip funciones desde Ruby:

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

Esto no responde la pregunta. 'strip' solo elimina el espacio en blanco inicial y final - http://ruby-doc.org/core-1.9.3/String.html#method-i-strip-21 – thelostspore

+1

chomp es la mejor manera ... no puedo creer esto tiene menos votaciones ascendentes – user1735921

+0

en el método chomp, \ n y \ r se eliminan del final de str si existen, no en el medio. Entonces esto no soluciona la pregunta OP – silva96

Cuestiones relacionadas