我正试图从多个记录中解析出一些信息。我感兴趣的项目之一可以在字符串中有多个条目。我的想法只是返回所有匹配值的数组,但我遇到了结果的问题。例如:
> 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="[^"]+')
=> []
无论如何,匹配,呃,匹配和扫描为什么没有?
答案 0 :(得分:2)
String#match
将其参数转换为Regexp,String#scan
搜索文字字符串,如果这是你给它的,给#scan一个Regexp给它相同的匹配。引用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"]
扫描也将继续匹配整个字符串,而匹配在第一个模式停止(如果需要,您可以给它一个开始偏移量以继续)。