Ответ 1
Я рекомендую использовать lines
вместо split
для этой задачи. lines
сохранит затяжной разрыв строки, что позволит вам увидеть нужный пустую строку. Используйте chomp
для очистки:
"aaaa\nbbbb\n\n".lines.map(&:chomp)
[
[0] "aaaa",
[1] "bbbb",
[2] ""
]
Другие, более запутанные, способы получения:
"aaaa\nbbbb\n\n".split(/(\n)/).each_slice(2).map{ |ary| ary.join.chomp }
[
[0] "aaaa",
[1] "bbbb",
[2] ""
]
Он использует использование группы захвата в split
, которая возвращает разделенный текст с разделяемым промежуточным текстом. each_slice
затем группирует элементы в двухэлементные подматрицы. map
получает каждый двухэлементный подматрица, имеет ли join
, а затем chomp
.
Или:
"aaaa\nbbbb\n\n".split(/(\n)/).delete_if{ |e| e == "\n" }
[
[0] "aaaa",
[1] "bbbb",
[2] ""
]
Здесь возвращается split
:
"aaaa\nbbbb\n\n".split(/(\n)/)
[
[0] "aaaa",
[1] "\n",
[2] "bbbb",
[3] "\n",
[4] "",
[5] "\n"
]
Мы не видим, что это используется очень часто, но это может быть полезно.