这将比使用split('|')
正则表达式更好地处理:
array = []
text = 'gi|324021737|ref|NM_001204301.1| gi|324021738|ref|NP_001191230.1| 100.00 459 0 0 1080 2456 294 752 0.0 905'
array << text.split('|')[4, 2].map(&:lstrip)
=> [["gi", "324021738"]]
管道(“|”)通常用于分隔数据库输出中的字段,类似于逗号分隔值文件 (CSV)。
Ruby 的CSV甚至是更好的选择:
require 'csv'
text = 'gi|324021737|ref|NM_001204301.1| gi|324021738|ref|NP_001191230.1| 100.00 459 0 0 1080 2456 294 752 0.0 905'
array = []
CSV.parse(text, :col_sep => '|') do |row|
array << row[4, 2].map(&:lstrip)
end
array
=> [["gi", "324021738"]]
使用 CSV 可能比拆分更好,尤其是比简单的正则表达式更好的原因是,当分隔文件嵌入另一个字段时,它通常会转义分隔字符。捕获该条件的正则表达式很难编写和维护。split
也可能做错事,这就是为什么最好依赖预先构建/预先测试的“轮子”,如 CSV。