Преобразование многострочной строки в массив в Ruby с использованием разрывов строк в качестве разделителей

Я хотел бы включить эту строку

"P07091 MMCNEFFEG

P06870 IVGGWECEQHS

SP0A8M0 VVPVADVLQGR

P01019 VIHNESTCEQ"

в массив, похожий на ruby.

["P07091 MMCNEFFEG", "P06870 IVGGWECEQHS", "SP0A8M0 VVPVADVLQGR", "P01019 VIHNESTCEQ"]

с помощью split не возвращает то, что я хотел бы из-за разрывов строк.

Ответ 1

Это один из способов борьбы с пустыми строками:

string.split(/\n+/)

Например,

string = "P07091 MMCNEFFEG

P06870 IVGGWECEQHS

SP0A8M0 VVPVADVLQGR




P01019 VIHNESTCEQ"

string.split(/\n+/)
  #=> ["P07091 MMCNEFFEG", "P06870 IVGGWECEQHS",
  #    "SP0A8M0 VVPVADVLQGR", "P01019 VIHNESTCEQ"]

Ответ 2

string = "P07091 MMCNEFFEG

P06870 IVGGWECEQHS

SP0A8M0 VVPVADVLQGR

P01019 VIHNESTCEQ"

Использование CSV::parse

require 'csv'

CSV.parse(string).flatten
# => ["P07091 MMCNEFFEG", "P06870 IVGGWECEQHS", "SP0A8M0 VVPVADVLQGR", "P01019 VIHNESTCEQ"]

Другой способ: String#each_line: -

ar = []
string.each_line { |line| ar << line.strip unless line == "\n" }
ar # => ["P07091 MMCNEFFEG", "P06870 IVGGWECEQHS", "SP0A8M0 VVPVADVLQGR", "P01019 VIHNESTCEQ"]

Ответ 3

Создание ответа @Martin:

lines = string.split("\n").reject(&:blank?)

Это даст вам только строки, которые оцениваются

Ответ 4

Split может взять параметр в виде символа, который будет использоваться для разделения, поэтому вы можете сделать:

lines = string.split("\n")

Ответ 5

Мне нравится использовать это как довольно общий метод для обработки новых строк и возвратов:

lines = string.split(/\n+|\r+/).reject(&:empty?)