0

我正在尝试从多条记录中解析出一些信息。我感兴趣的项目之一可以在一个字符串中有多个条目。我的想法只是返回所有匹配值的数组,但我遇到了结果问题。例如:

> s = '>ctg7180000000043_1204 selected_feature: CDS loc=299156..299605;/db_xref="GO:0007155";/db_xref="GO:0009289";'
 => ">ctg7180000000043_1204 selected_feature: CDS loc=299156..299605;/db_xref=\"GO:0007155\";/db_xref=\"GO:0009289\";"
> s.match('db_xref="[^"]+')
 => #<MatchData "db_xref=\"GO:0007155">
> s.scan('db_xref="[^"]+')
 => []

无论如何,为什么匹配,呃,匹配和扫描不匹配?

4

1 回答 1

3

String#match将其参数转换为正则表达式,String#scan如果这是您给它的字符串,则搜索文字字符串,给 #scan 一个正则表达式给它相同的匹配项。参考 String#match 和 String#scan 的 ri 文档。在 irb 中尝试以下操作:

regex = /db_xref="[^"]+/
s.match(regex)
=> #<MatchData "db_xref=\"GO:0007155">
s.scan(regex)
=> ["db_xref=\"GO:0007155", "db_xref=\"GO:0009289"]

scan 还将继续匹配整个字符串,而 match 在第一个模式处停止(如果需要,您可以给它一个起始偏移量以继续)。

于 2013-02-27T19:35:43.647 回答