从一系列正则表达式捕获中返回所有匹配项

时间:2011-03-22 22:05:22

标签: ruby regex

我有一个字符串,其中包含我想从中提取的许多字段。 这些我可以很容易地从正则表达式解析,但我想一次抓住它们。

我的字符串是:

>sp|P31946-2|1433B_HUMAN Isoform Short of 14-3-3 protein beta/alpha OS=Homo sapiens GN=YWHAB

我想使用这样的东西:

id, entry, protein, organism, gene, existence, seq_version = (1..6).each do |i|
  line[/^>sp\|(\w*)\|(\w*)\s(.*)\sOS=(.+)\sGN=(.+)\sPE=(\d*)\sSV=(\d*)/, i]
end

主要是,我只想让一行代码从条目字符串中捕获所有这些属性。有办法吗?

2 个答案:

答案 0 :(得分:3)

MatchData#captures

f1,f2,f3,f4 = /(.)(.)(\d+)(\d)/.match("THX1138.").captures
f1    #=> "H"
f2    #=> "X"
f3    #=> "113"
f4    #=> "8"

答案 1 :(得分:2)

另外,

>> "THX1138".scan(/(.)(.)(\d+)(\d)/)
=> [["H", "X", "113", "8"]]