繁体   English   中英

如何使用正则表达式正确提取数据

[英]How to correctly extract data with Regular Expressions

我第一次面对正则表达式,我需要从此报告(带有格式设置信息的txt文件)中提取一些数据:

\\ n10:Vikelis M,Rapoport AM。 抗癫痫药作为\\偏头痛的预防剂的作用。 中枢神经系统药物。 2010 Jan 1; 24(1):21-33。 doi:\\ n10.2165 / 11310970-000000000-00000。 评论。 PubMed PMID:20030417。\\ n \\ n \\ n21:Johannessen Landmark C,Larsson PG,Rytter E,Johannessen SI。 抗癫痫药\\用于癫痫和其他疾病的药物-基于人群的处方研究。\\ n癫痫病研究。 2009年11月; 87(1):31-9。 Epub 2009年8月13日。PubMed PMID:19679449。\\ n \\ n \\ n

如您所见,所有txt记录都以“ xx:”开头,并始终以“ PubMed PMID:dddddddd”结尾,但是使用RegEx像这样:

regex = re.compile(r"^\d+: .+ PMID: \d{8}.$")
regex.findall(inputfile)

给我一个大字符串列表,所以我误会了。 如何从这些记录中提取数据?

使用.+? 用于非贪婪匹配,而不是.+ ,这会使您贪婪匹配。 您还需要re.DOTALL以确保您的. 匹配需要匹配的行尾字符,然后重新匹配re.MULTILINE确保^$匹配的开始和结束是行,而不仅仅是整个字符串。 有问题的选项需要与“位或” | 运算符并作为re.compile的第二个参数传递。

如果记录与示例中显示的一致,则无需使用正则表达式。 将文本文件简单划分为令牌列表即可解决问题。 例如:

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

同样,如果您可以相信记录的第一行包含作者; 第二个是标题,第三个是期刊,等等,您也许可以很快完成。 如果信息有点“上下文”,那么您可以在此时开始使用regexp。

祝好运。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM