使用换行符作为分隔符将多行字符串转换为Ruby中的数组

Sha*_*ang 12 ruby arrays string

我想把这个字符串

"P07091 MMCNEFFEG

P06870 IVGGWECEQHS

SP0A8M0 VVPVADVLQGR

P01019 VIHNESTCEQ"
Run Code Online (Sandbox Code Playgroud)

进入一个看起来像红宝石的数组.

["P07091 MMCNEFFEG", "P06870 IVGGWECEQHS", "SP0A8M0 VVPVADVLQGR", "P01019 VIHNESTCEQ"]
Run Code Online (Sandbox Code Playgroud)

split由于换行符,使用不会返回我想要的内容.

Car*_*and 30

这是处理空白行的一种方法:

string.split(/\n+/)
Run Code Online (Sandbox Code Playgroud)

例如,

string = "P07091 MMCNEFFEG

P06870 IVGGWECEQHS

SP0A8M0 VVPVADVLQGR




P01019 VIHNESTCEQ"

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

  • +1.应用正则表达式的力量.. :) (2认同)
  • 假设`string =“现在是所有好人的时间\n”`。你可以这样做:`string.split(/\n+/).map { |line| line.split(/\s+/, 2) }.to_h #=> {"现在"=>"是时候了", "为了"=>"所有好人"}`. 这使用采用“limit”参数的 [String#split](https://ruby-doc.org/core-2.7.0/String.html#method-i-split) 形式。请注意,如果另一行以“for”开头,则 `h["for"]` 将被覆盖。 (2认同)

lig*_*yrs 7

我喜欢将其用作处理换行符和返回的非常通用的方法:

lines = string.split(/\n+|\r+/).reject(&:empty?)
Run Code Online (Sandbox Code Playgroud)


Aru*_*hit 5

string = "P07091 MMCNEFFEG

P06870 IVGGWECEQHS

SP0A8M0 VVPVADVLQGR

P01019 VIHNESTCEQ"
Run Code Online (Sandbox Code Playgroud)

运用 CSV::parse

require 'csv'

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

使用的另一种方式String#each_line: -

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