我想從大文件中提取信息,但無法弄清楚如何從文件行中提取字符串,只有當文件中的相同記錄中的前一行已被正則表達式匹配時。文件中一條記錄的示例如下:如何從大文件中提取字符串只有在以前使用Ruby出現特定字符串?
*NEW RECORD
RECTYPE = D
MH = Informed Consent
AQ = ES HI LJ PX SN ST
ENTRY = Consent, Informed
MN = N03.706.437.650.312
MN = N03.706.535.489
FX = Disclosure
FX = Mental Competency
FX = Therapeutic Misconception
FX = Treatment Refusal
ST = T058
ST = T078
AN = competency to consent: coordinate IM with MENTAL COMPETENCY (IM)
PI = Jurisprudence (1966-1970)
PI = Physician-Patient Relations (1966-1970)
MS = Voluntary authorization, by a patient or research subject, etc,...
此文件包含超過20,000條記錄,例如此示例。我想用「MH」字段來識別這些記錄中的一小部分。在這個例子中,我想查找「知情同意書」,然後使用正則表達式僅在該記錄中提取FX,AN和MS字段中的信息。到目前爲止,我已經打開文件,訪問MH術語所存儲的散列,並且能夠從文件中的記錄中提取這些條款。我也有一個正常運行的正則表達式,用於標識「FX」字段中的內容。
File.open('mesh_descriptor.bin').each do |file_line|
file_line = file_line.chomp
# read each key of candidate_descriptor_keys
candidate_descriptor_keys.each do |cand_term|
if file_line =~ /^MH\s=\s(#{cand_term})$/
mesh_header = $1
puts "MH from Mesh Descriptor file is: #{mesh_header}"
if file_line =~ /^FX\s=\s(.*)$/
see_also = $1
puts " See_Also from Descriptor file is: #{see_also}"
end
end
end
end
哈希包含以下MH(鍵):
candidate_descriptor_keys = ["Body Weight", "Obesity", "Thinness", "Fetal Weight", "Overweight"]
當我把語句「if」語句之外,以提取「MH」我已經成功提取「FX」,但整個文件中的所有「FX」都被檢索到 - 而不是我所需要的。我認爲在前面的「if」語句中將「FX」語句放在「if」語句中會將結果限制爲僅當第一個語句爲真時纔會發現的結果,但我沒有得到此策略的結果(也沒有錯誤)。我想作爲一個結果是:
> Informed Consent
> Disclosure
> Mental Competency
> Therapeutic Misconception
> Treatment Refusal
還有「AN」和只有符合「MH」記錄「MS」字段中的字符串。任何的意見都將會有幫助!
就在我的答案的「代碼」部分之前,我寫了幾行開始,「我假設......」。我建議你在你的問題中加入類似的東西,也許就在你的段落結束之後「到目前爲止的腳本如下:」(並且移動該句子以跟隨添加的文本)。一旦你做完了,我會刪除我的答案的那一部分。如果你想用我寫的東西,我不反對。 –
讀者:我和提問者進行了長時間的交談(評論)。如果您不明白該問題,請在「代碼」部分之前閱讀我的答案的開頭部分。還要注意提問者對我答案的評論。明天,提問者將清理問題並刪除他/她的意見,這些意見不再相關。 (我已經刪除了我的。) –