Удаление всех пробелов из строки в 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"
обратите внимание, что это также удалит алфавитные символы, тире, символы, в основном все, что не является цифрой.