これは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 のように、事前に構築され、事前にテストされた「車輪」に頼る方がよいのです。