如果在您的例子給出的記錄爲一致的,你不需要使用正則表達式。把文本文件簡單分割成令牌列表就可以了。例如:
txt = '\n10: Vikelis M, Rapoport AM. Role of antiepileptic drugs as preventive agents for \nmigraine. CNS Drugs. 2010 Jan 1;24(1):21-33. doi:\n10.2165/11310970-000000000-00000. Review. PubMed PMID: 20030417.\n\n\n21: Johannessen Landmark C, Larsson PG, Rytter E, Johannessen SI. Antiepileptic\ndrugs in epilepsy and other disorders--a population-based study of prescriptions.\nEpilepsy Res. 2009 Nov;87(1):31-9. Epub 2009 Aug 13. PubMed PMID: 19679449.\n\n\n'
lines = [token.replace('\n', '') for token in txt.split('.')]
for line in lines:
print line
將線打印線的參考文獻中的每個元素:
10: Vikelis M, Rapoport AM
Role of antiepileptic drugs as preventive agents for migraine
CNS Drugs
2010 Jan 1;24(1):21-33
doi:10
2165/11310970-000000000-00000
Review
PubMed PMID: 20030417
21: Johannessen Landmark C, Larsson PG, Rytter E, Johannessen SI
Antiepilepticdrugs in epilepsy and other disorders--a population-based study of prescriptions
Epilepsy Res
2009 Nov;87(1):31-9
Epub 2009 Aug 13
PubMed PMID: 19679449
同樣,如果你能相信一個記錄的第一行的作者;第二個是標題,第三個是期刊等,你可以很快做到這一點。如果信息有點「上下文」,那麼你可以在這時開始使用正則表達式。
好運。
已應用和測試:'re.findall(r'(\ d +):(。+?)PubMed PMID:(\ d {8})',data,re.M | re.S)' – tux21b 2010-07-23 16:35:15
什麼是貪婪的匹配?這意味着正則表達式引擎可以匹配儘可能多的字符。這是默認行爲。 OP發生的事情是,他的正則表達式匹配「\ d +:」的第一次出現,然後匹配最後發生的「\ d {8}。」,從而有效地匹配整個輸入文本。 – 2010-07-23 16:50:15
感謝您的幫助,「非貪婪匹配」改變了很多事情:) RegEx確實是一個強大的工具! – 2010-07-23 16:50:32