我需要帮助 Ruby 中的正则表达式失败,我不知道为什么。我正在使用 Ruby 从大型生物数据库中获取部分文本,该数据库具有以下结构(为简单起见,我将仅显示两项):
//
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 代码相关的信息。假设我只想获取IPI00303292.1
从 IPI 代码到以下内容的文本行//
。
正则表达式的 Rubular 测试/(IPI00303292\.1).*\/\//m
抓取整个显示的文本(即两个条目),识别最后一个//
,同时跳过两者之间的第二个。
更新: 嗨,根据您的宝贵建议,我想我已经接近为我的目的获得可用的程序了。代码是:
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
现在要解决的最后一个问题是,我在正确选择的正面命中的输出文件中获得了两个副本。我无法摆脱这样的错误。请帮忙 。