2009-06-16 2 views
6

Дана строка "5 900 000"Strip/заменить пробелы в строке

Я хочу, чтобы избавиться от пространств с помощью gsub со следующей схемой:

gsub(/\s/, '') 

, но это не похоже на работу. Также не:

gsub(' ', '') 
+1

Не уверен, что если бы это было намеренным, но не должно быть период после GSUB. "gsub ('', '')" not "gsub. ('', '')" –

ответ

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

Является ли это на самом деле строка? !

.gsub возвращает значение, если вы хотите изменить переменную попробовать .gsub (»», „“)

22

Если вы хотите сделать замену на месте, вы должны использовать:

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

в качестве альтернативы, GSUB возвращает строку с заменами

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

EDIT: Исходя из вашего ответа, похоже, у вас есть некоторые unprintabl e символов, встроенных в строку, а не пробелы. Использование /\D/ в качестве строки поиска может быть тем, что вы хотите. Следующее будет соответствовать любому несимметричному символу и заменить его пустой строкой.

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

работает для меня.

Вы влияете на результат на переменную?

1

"5 900 000".gsub(/\s/,'') работает отлично

Из того, что я вижу, Вы писали GSUB точка (Foo, бар), где он должен быть string.gsub (Foo, Bar)

0

вы имеете в виду

с восклицательным знаком?

0

Самое смешное, что когда я печатаю строку я получаю

697 \ 302 \ 240000

но то, что попадает в базе данных: 697 000. Я знаю, что модели я давшие должны работать а также ваши предложения, но это, кажется, немного «изворотливый» случай :-)

+2

в этом случае попробуйте str.gsub! (/ \ D /, '') – rampion

4

Просто для пинков: вам даже нужно регулярное выражение здесь? String#tr должен сделать трюк только штрафом:

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

Как gsub и gsub!, метод ! делает изменения в месте, а не возвращая результат изменений. Я не знаю, чего ты хочешь здесь.

В таком случае tr кажется более простым для меня. Я не ищу оптимизацию, но хорошо помнить, что существует множество строковых методов других, чем регулярных выражений.

+0

Не уверен, что 'tr' является хорошим вариант? 'Переводит str на место, используя те же правила, что и String # tr. Возвращает str или nil, если никаких изменений не было. 'Так что если строка ничего не соответствует, она вернет nil. – 23inhouse

+0

@ 23inhouse Я не уверен, что вы имеете в виду. Для первого 'tr', я думаю, вы имеете в виду' tr! '. (Вся разница между 'tr' и' tr! 'Заключается в том, что' tr' делает ** не ** делает изменения на месте. Что касается возврата 'nil', то это зависит от большего приложения. не дал нам достаточно, чтобы продолжить. Это может быть хорошо или это может быть ошибкой. – Telemachus

+0

Правда, я думал, что стоит упомянуть. – 23inhouse

2

Я предлагаю сделать str.gsub!(/\s+/, '') по соображениям эффективности.

2

Попробуйте надеюсь, что это будет полезно:

2.2.1 :001> str= " Jai Kumar rajput "; 
    # " Jai Kumar rajput " 
2.2.1 :001> str.squish.downcase.tr(" ",""); 
    # "JaiKumarRajput" 
Смежные вопросы