Убрать / заменить пробелы внутри строки - PullRequest
10 голосов
/ 16 июня 2009

С учетом строки "5 900 000"

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

gsub(/\s/, '')

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

gsub(' ', '')

Ответы [ 9 ]

30 голосов
/ 16 июня 2009

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

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

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

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

РЕДАКТИРОВАТЬ : Исходя из вашего ответа, похоже, что в строку встроены непечатные символы, а не пробелы. Использование / \ D / в качестве строки поиска может быть тем, что вам нужно. Следующее будет соответствовать любому нецифровому символу и заменять его пустой строкой.

str.gsub!(/\D/,'')
10 голосов
/ 16 июня 2009
>> "5 900 00".gsub(' ','')
=> "590000"

Это действительно строка?

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

4 голосов
/ 16 июня 2009

Только для ударов: тебе вообще нужно регулярное выражение здесь? String#tr отлично справится с задачей:

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

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

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

2 голосов
/ 29 октября 2015

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

2.2.1 :001> str= "  Jai   Kumar rajput ";
  # "  Jai   Kumar rajput "
2.2.1 :001> str.squish.downcase.tr(" ","");
  # "JaiKumarRajput" 
2 голосов
/ 17 июня 2009

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

1 голос
/ 16 июня 2009

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

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

0 голосов
/ 16 июня 2009

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

697 \ 302 \ 240000

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

0 голосов
/ 16 июня 2009

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

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

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

0 голосов
/ 16 июня 2009
print "5 900 000".gsub(/\s/, '')

У меня работает.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...