失敗する Ruby の正規表現について助けが必要です。理由がわかりませんでした。Ruby を使用して、次の構造を持つ大規模なバイオ データベースからテキストの一部を取得しています (簡単にするために 2 つの項目のみを示します)。
//
ID IPI00303292.1 IPI; PRT; 538 AA.
AC IPI00303292;
DR Superfamily; SSF48371; ARM; 1.
DR UniProt/Swiss-Prot; P52294; IMA1_HUMAN; M.
DR CleanEx; HS_KPNA1; -; -.
//
ID IPI00301082.1 IPI; PRT; 309 AA.
AC IPI00301082;
DT 06-JUN-2003 (IPI Human rel. 2.20, Created)
//
つまり、データベース エントリは、IPI コードを含む行で始まり、二重スラッシュで終わります。特定の IPI コードに関連付けられた情報を取得したいと考えています。IPIIPI00303292.1
コードから次の//
.
正規表現の Rubular テストは/(IPI00303292\.1).*\/\//m
、表示されたテキスト全体 (つまり 2 つのエントリ) を取得し、最後のものを認識し//
、2 つの間の 2 番目をスキップします。
更新: こんにちは、あなたの貴重な提案に基づいて、私の目的に使用できるプログラムを取得することに近づいていると思います。コードは次のとおりです。
matches = []
no_matches = []
ipi = File.open('mini_alphaIPI.txt').collect do | var | # read the file containing IPI search codes
var = var.chomp
db = File.open('mini_human.dat') # read the file containing IPI data
db.readlines.map(&:chomp).slice_before(%r(\A//)).each do |db_record|
db_record.shift
next if db_record.empty?
matches.push(db_record) if db_record.first.include?(var)
if db_record.first.include?(var) then
matches.push(db_record)
else
no_matches.push(var)
end
end
end
File.open('out_raw.txt', "wb") do |file|
matches.each do |z|
file.puts z
end
end
ここで解決すべき最後の問題は、適切に選択されたポジティブ ヒットの出力ファイルに 2 つのコピーが含まれていることです。そんなミスはやめられません。助けてください 。