我试图从只有第一个期刊参考的3-4个条目的文件中提取。关于如何只获得第一次匹配的任何想法?
这是我到目前为止所做的。我可以提取引用,但我得到了所有这些:
if file_line =~ /^ JOURNAL \*?(.*)/
captured_journal = $1
更清楚的是,这是我试图仅提取第一个JOURNAL条目的文件中的一部分:
JOURNAL Genomics 33 (2), 229-246 (1996)
PUBMED 8660972
REFERENCE 2 (bases 1 to 17009)
AUTHORS Lopez,J.V.
TITLE Direct Submission
JOURNAL Submitted (07-FEB-1995) Jose V. Lopez, Laboratory of Viral
Carcinogenesis, PRI/DynCorp, Biological Carcinogenesis and
Development Prog, Bldg 560, Room 11-21, NCI-Frederick Cancer
Research and Development Center, Frederick, MD 21702-1201, USA`enter code here`
我只想"Genomics 33 (2), 229-246 (1996)"
,但我也会收到下一期的参赛作品。
答案 0 :(得分:1)
很难回答你的问题,你的例子没有显示完整的编码。
一种可能性:你的if file_line
在一个循环中。然后你可以离开循环:
filecontent.each_line{|file_line|
if file_line =~ /^ JOURNAL \*?(.*)/
captured_journal = $1
break
end
}
作为替代方案,您可以检查,如果您已找到条目:
captured_journal = nil
filecontent.each_line{|file_line|
if file_line =~ /^ JOURNAL \*?(.*)/
captured_journal = $1 unless captured_journal
end
}
但也许你不在循环中,文件内容存储在一个字符串中(例如File.read
)。然后你可以使用一个简单的正则表达式:
filecontent =~ /^ JOURNAL \*?(.*)/
captured_journal = $1
或
/^ JOURNAL \*?(.*)/.match(filecontent)[1]
发布更多详细信息后的更正:
您可以使用正则表达式/^\s*JOURNAL\s+(.*)/
。您的Regexp使用固定数量的空格。使用\s+
时,空格的数量是灵活的。