2009-06-16 12 views
6

Dada una cadena "5 900 000"Gaza/reemplazar los espacios dentro de una cadena

que quieren deshacerse de los espacios utilizando gsub con el siguiente patrón:

gsub(/\s/, '') 

pero eso no parece funcionar. Tampoco:

gsub(' ', '') 
+1

No estoy seguro si eso fue intencional, pero no debería haber un período después gsub. "gsub ('', '')" not "gsub. ('', '')" –

Respuesta

7
>> "5 900 00".gsub(' ','') 
=> "590000" 

¿Es realmente una cadena? !

.gsub devuelve el valor, si desea cambiar el .gsub intento variable ("", '')

22

Si usted quiere hacer la sustitución en su lugar, es necesario utilizar:

str.gsub!(/\s/,'') 

Alternativamente, gsub devuelve la cadena con los reemplazos

str2 = str.gsub(/\s/,'') 

EDITAR: Basado en su respuesta, que parece que tiene alguna unprintabl e caracteres incrustados en la cadena, no espacios. Usando /\D/ como la cadena de búsqueda puede ser lo que desea. Lo siguiente coincidirá con cualquier carácter que no sea un dígito y lo reemplazará con la cadena vacía.

str.gsub!(/\D/,'') 
0
print "5 900 000".gsub(/\s/, '') 

funciona para mí.

¿Está afectando el resultado a la variable?

1

"5 900 000".gsub(/\s/,'') funciona bien

Por lo que veo que escribió gsub punto (foo, bar) donde debe estar string.gsub (foo, bar)

0

Qué quiere decir

con el signo de exclamación?

0

Lo curioso es que al imprimir la cadena me sale

697 \ 302 \ 240000

pero lo que llega a la base de datos es: 697 000 Sé que los patrones que he dado deben trabajar así como sus sugerencias, pero este parece ser un caso un poco 'dudoso' :-)

+2

en este caso, pruebe str.gsub! (/ \ D /, '') – rampion

4

Solo para patadas: ¿necesita una expresión regular aquí? String#tr debe hacer el truco muy bien:

telemachus ~ $ irb 
>> "500 500 12".tr(' ', '') 
=> "50050012" 
>> "500 500 12".tr!(' ', '') 
=> "50050012" 

Al igual que con gsub y gsub!, el método ! hace que el cambio de lugar en lugar de devolver el resultado modificado. No sé cuál quieres aquí.

En un caso como este, tr parece más sencillo para mí. No estoy buscando la optimización, pero es bueno recordar que hay muchos métodos de cadena otros que las expresiones regulares.

+0

No estoy seguro de si 'tr' es bueno ¿opción? 'Traduce str en su lugar, usando las mismas reglas que String # tr. Devuelve str, o nil si no se realizaron cambios. Por lo tanto, si la cadena no coincide con nada, devolverá nil. – 23inhouse

+0

@ 23inhouse No estoy seguro de lo que quieres decir. Para el primer 'tr', creo que quieres decir' tr! '. (Toda la diferencia entre 'tr' y' tr! 'Es que' tr' no ** hace ** los cambios en su lugar. En cuanto a devolver 'nil', si eso está bien depende de la aplicación más grande. no nos ha dado suficiente para seguir. Podría estar bien o podría ser un error. – Telemachus

+0

cierto, pensé que valía la pena mencionarlo. – 23inhouse

2

Sugiero hacer str.gsub!(/\s+/, '') por razones de eficiencia.

2

probar este Esperamos que esto útil:

2.2.1 :001> str= " Jai Kumar rajput "; 
    # " Jai Kumar rajput " 
2.2.1 :001> str.squish.downcase.tr(" ",""); 
    # "JaiKumarRajput" 
Cuestiones relacionadas