Рубин разделен пробелами

202
10

Как я могу написать функцию Ruby, которая разбивает входные данные любым видом пробела и удаляет все пробелы из результата? Например, если вход


 aa bbb
cc dd ee

Затем верните массив ["aa", "bbb", "cc", "dd", "ee"].

спросил(а) 2012-11-24T06:13:00+04:00 7 лет, 7 месяцев назад
1
Решение
87

input.split("\s")

Если вместо /\s/ используется "\s", белые будут удалены из результата.

ответил(а) 2013-05-01T15:11:00+04:00 7 лет, 2 месяца назад
234

Это поведение по умолчанию String#split:


input = <<-TEXT
aa bbb
cc dd ee
TEXT

input.split


Результат:

["aa", "bbb", "cc", "dd", "ee"]

Это работает во всех версиях Ruby, которые я тестировал, включая 1.8.7, 1.9.3, 2.0.0 и 2.1.2.

ответил(а) 2014-08-01T22:38:00+04:00 5 лет, 11 месяцев назад
232

Для примера, который вы дали:


str.gsub(/\s+/m, ' ').strip.split(" ")

он возвращает:


["aa", "bbb", "cc", "dd", "ee"]

Значение кода:


/\s+/m - более сложная часть. \s означает пробел, поэтому \s+ означает одну или несколько пробелов. В части /m, m называется модификатором, в этом случае это означает, что многострочный, то есть посещение многих строк, а не только одного, которое является поведением по умолчанию.
Таким образом, /\s+/m означает поиск последовательностей одного или нескольких пробелов.


gsub означает замену всех.


strip является эквивалентом trim на других языках и удаляет пробелы из фронта и конца строки.


Как, я писал объяснение, это может быть так, когда вы заканчиваете и заканчиваете символ конца или начала строки.


Чтобы быть в безопасности

Код может быть записан как:


str.gsub(/\s+/m, ' ').gsub(/^\s+|\s+$/m, '').split(" ")

Итак, если у вас есть:


str = "\n     aa bbb\n    cc    dd ee\n\n"

Затем вы получите:


["aa", "bbb", "cc", "dd", "ee"]

Значение нового кода:


^\s+ последовательность белых пробелов в начале строки


\s+$ последовательность белых пробелов в конце строки


So gsub(/^\s+|\s+$/m, '') означает удаление любой последовательности белого пробела в начале строки и в конце строки.

ответил(а) 2012-11-24T06:28:00+04:00 7 лет, 7 месяцев назад
169

input = <<X
aa bbb
cc dd ee
X

input.strip.split(/\s+/)

ответил(а) 2012-11-24T07:07:00+04:00 7 лет, 7 месяцев назад
95

Как небольшая модификация ответа Vidaica, в Ruby 2.1.1 он выглядит как


input.split(" ")

Будет компенсировать все пробелы, будь то пробелы, табуляции или символы новой строки, что дает:


["aa", "bbb", "cc", "dd", "ee"]

ответил(а) 2014-08-01T22:24:00+04:00 5 лет, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема