2009-06-16 7 views
6

d'une chaîne "5 900 000"Strip/remplacer les espaces dans une chaîne

Je veux débarrasser des espaces en utilisant gsub avec le motif suivant:

gsub(/\s/, '') 

mais cela ne semble pas fonctionner. Pas plus que:

gsub(' ', '') 
+1

Je ne sais pas si cela était intentionnel, mais il ne devrait pas être une période après gsub. "gsub ('', '')" not "gsub. ('', '')" –

Répondre

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

Est-ce vraiment une chaîne? !

.gsub renvoie la valeur, si vous voulez changer la .gsub try variable (» », "")

22

Si vous voulez faire le remplacement en place, vous devez utiliser:

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

Sinon, gsub retourne la chaîne avec les remplacements

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

EDIT: sur la base de votre réponse, il semble que vous avez des unprintabl Les caractères incorporés dans la chaîne, pas les espaces. En utilisant /\D/ comme la chaîne de recherche peut être ce que vous voulez. Les éléments suivants correspondent à tout caractère non numérique et le remplacent par la chaîne vide.

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

Works pour moi.

Affectez-vous le résultat à la variable?

1

"5 900 000".gsub(/\s/,'') fonctionne très bien

D'après ce que je vous vois écrit gsub point (foo, bar) où il doit être string.gsub (foo, bar)

0

voulez-vous dire

avec le point d'exclamation?

0

Le plus drôle est que lorsque j'imprime la chaîne que je reçois

697 \ 302 \ 240000

mais ce qui arrive à la base de données: 697 000 Je sais que les modèles que j'ai donnés doivent travailler ainsi que vos suggestions, mais cela semble être un peu un cas «douteux» :-)

+2

dans ce cas essayez str.gsub! (/ \ D /, '') – rampion

4

Just for kicks: avez-vous besoin d'une expression régulière ici? String#tr devrait faire l'affaire très bien:

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

Comme gsub et gsub!, la méthode ! fait le changement en place plutôt que de retourner le résultat a changé. Je ne sais pas ce que tu veux ici.

Dans un cas comme celui-ci, tr me semble plus simple. Je ne cherche pas d'optimisation, mais il est bon de se rappeler qu'il existe beaucoup de méthodes de chaînes autres que les expressions régulières.

+0

Vous ne savez pas si 'tr' est un bon option? 'Traduit str en place, en utilisant les mêmes règles que String # tr. Retourne str, ou nul si aucun changement n'a été fait. »Donc, si la chaîne ne correspond à rien, elle retournera zéro. – 23inhouse

+0

@ 23inhouse Je ne suis pas sûr de ce que vous voulez dire. Pour le premier 'tr', je pense que vous voulez dire' tr! '. (Toute la différence entre 'tr' et' tr! 'Est que' tr' ne ** fait pas ** les changements en place.En ce qui concerne le retour de 'nil', le fait que cela soit ou non dépend de l'application plus grande. Cela ne nous a pas donné assez pour continuer, peut-être que ce serait bien ou que ce serait une erreur – Telemachus

+0

vrai, j'ai pensé que ça valait la peine d'être mentionné. – 23inhouse

2

Je suggère de faire str.gsub!(/\s+/, '') pour des raisons d'efficacité.

2

Essayez cette Espérons que cela utile:

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