Вопрос по whitespace, split, ruby – Рубин, разделенный пробелами

37

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

 aa bbb
cc    dd ee

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

Ваш Ответ

5   ответов
6
input.split("\s")

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

Можно'не найти его в документах. Nakilon
47

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

input = 
Так много сложных ответов и самый простой ответ самый лучший! toxaq
Это должно быть лучшим ответом для всех последних версий ruby. В то время, когда этот вопрос был задан (2012), я неЯ думаю, что это можно было сделать таким образом, что объясняетсложные ответы ". Shashank
@Shashank Хорошо, как я уже упоминал в ответе, я протестировал это с Ruby 1.8.7, 1.9.3, 2.0.0 и 2.1.2, и все они работали в точности так, как показано здесь. 1.8.7 отсутствовал в 2008 году, так что даже тогда, когда спрашивали об этом ответе, у ОП не было никаких причинт только что использовалString#split, Понятия не имею, почему никто не упомянул это до сих пор ... Ajedi32
21
input = 
О, это очень просто, спасибо! JJ Beck
42

Следующее должно работать для примера, который вы дали:

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+$ последовательность пробелов в конце строки

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

@JJBeck, пожалуйста, смотрите обновление. Candide
я люблюruby , Почему можноу него есть научные библиотеки, так что ям позволил реально его использовать .. javadba
Спасибо за ваш ответ, Кандид! Не могли бы вы (или кто-либо другой) дать краткое объяснение вашего кода? JJ Beck
@ Ajedi32'ответ лучшеstackoverflow.com/a/25087512/165673 Yarin
Рубокоп провалил твой раскол (" ") из-за двойных кавычек. ablarg
5

с ответом, в Ruby 2.1.1 это выглядит так

input.split(" ")

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

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

Похожие вопросы