Удаление всех пробелов из строки в Ruby

Как удалить все новые строки и пробелы из строки в Ruby?

например, если у нас есть строка:

"123n12312313nn123 1231 1231 1"

это должно стать следующим:

"12312312313123123112311"

то есть, все пробелы должны быть удалены.

3 ответов


вы можете использовать что-то вроде:

var_name.gsub!(/\s+/, '')

или, если вы хотите вернуть измененную строку, вместо изменения переменной,

var_name.gsub(/\s+/, '')

это также позволит вам связать его с другими методами (т. е. something_else = var_name.gsub(...).to_i чтобы очистить пробел, а затем преобразовать его в целое число). gsub! отредактирует его на месте, поэтому вам придется написать var_name.gsub!(...); something_else = var_name.to_i. Строго говоря, пока есть хотя бы одно изменение,gsub! вернет новую версию (т. е. то же самое gsub would return), но на случай, если вы получаете строку без пробелов, она вернется nil и все сломается. Из-за этого я бы предпочел gsub если вы связываете методы.

gsub работает, заменяя любые совпадения первого аргумента содержимым второго аргумента. В этом случае он соответствует любой последовательности последовательных пробелов (или только одному) с регулярным выражением /\s+/, затем заменяет их пустой строкой. Есть также блок форма Если вы хотите выполнить некоторую обработку на согласованной части, а не просто заменить непосредственно; см. String#gsub для получения дополнительной информации об этом.

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

As ген предложил в своем комментарии, вы могли бы также использовать tr:

var_name.tr(" \t\r\n", '')

он работает аналогичным образом, но вместо замены регулярного выражения он заменяет каждый экземпляр n - й символ первого аргумента в строке он вызывается с помощью n - й символ второго параметра, или, если его нет, ни с чем. См.String#tr для получения дополнительной информации.


вы также можете использовать строка#delete:

str = "123\n12312313\n\n123 1231 1231 1"

str.delete "\s\n"
  #=> "12312312313123123112311"

вы могли бы использовать строка#удалить! изменить str на месте, но учтите,delete! возвращает nil если нет изменений


вы можете scan строка цифр /\d+/ и join результат:

string = "123\n\n12312313\n\n123 1231 1231 1\n"

string.scan(/\d+/).join
#=> "12312312313123123112311"

обратите внимание, что это также удалит алфавитные символы, тире, символы, в основном все, что не является цифрой.