我在插入数据库之前需要清理一些数据。每行代表一个出版物,其中一些具有不同的格式。唯一的相似之处是每条记录都在同一行。例如。
5: Aghasadeghi MR, Salmani AS, Sadat SM, Javadi F, Memarnejadian A, Vahabpour R, Zabihollahi R, Moshiri A, Siadat SD. Application of outer membrane vesicle ofNeisseria meningitidis serogroup B as a new adjuvant to induce stronglyTh1-oriented responses against HIV-1. Curr HIV Res. 2011 Dec 1;9(8):630-5. PubMedPMID: 22211657.
6: Ramezani A; Banifazl M; Mohraz M; Rasoolinejad M; Aghakhani A; Occulthepatitis B virus infection: A major concern in HIV-infected patients: Occult HBVin HIV. Hepat Mon. 2011 Jan 1;11(1):7-10. PubMed PMID: 22087108; PubMed CentralPMCID: PMC3206662.
7: Roohvand, F., Kossari, N. Advances in hepatitis C virus vaccines, Part one:Advances in basic knowledge for hepatitis C virus vaccine design. Expert OpinTher Pat. 2011 Dec;21(12):1811-30. Epub 2011 Oct 25. Review. PubMed PMID:22022980.
8: Chinikar, S., Javadi, A., Ataei, B., Shakeri, H., Moradi, M., Mostafavi, E., Ghiasi, S.M.Detection of West Nile virus genome and specific antibodies in Iranianencephalitis patients. Epidemiol Infect. 2011 Oct 19:1-5. [Epub ahead of print]PubMed PMID: 22008154.
您可以看到某些作者被半冒号分开,而其他作者则用逗号分隔。第7行和第8行有一个逗号,用于将姓氏与中间的首字母分开。我想将所有作者分组并将它们放在作者字段中,或者甚至将它们放在自己的列中。将这些作者彼此分开的最佳方法是什么?这不是一件容易的事;;)
答案 0 :(得分:4)
当格式不一致时,这可能会变得棘手,因为您需要做出一些假设。我为这个解决方案做的假设是,人们不会有超过20个字符的名称,标题将至少20个字符,不包含逗号,分号或句点。
这是一个将在最终作者之后插入标签的版本:
result = ''
for line in text.split('\n'):
result += re.sub(r'([^,;.]{20,}.*)', r'\t\1', line) + '\n'
这是一种获取每本书作者列表的方法:
authors = []
for line in text.split('\n'):
names = re.split(r'\d+: |[^,;.]{20,}', line)[1]
authors.append(re.findall(r'\w+,? [\w.]+', names))
结果:
>>> pprint.pprint(authors, width=200)
[['Aghasadeghi MR', 'Salmani AS', 'Sadat SM', 'Javadi F', 'Memarnejadian A', 'Vahabpour R', 'Zabihollahi R', 'Moshiri A', 'Siadat SD.'],
['Ramezani A', 'Banifazl M', 'Mohraz M', 'Rasoolinejad M', 'Aghakhani A'],
['Roohvand, F.', 'Kossari, N.'],
['Chinikar, S.', 'Javadi, A.', 'Ataei, B.', 'Shakeri, H.', 'Moradi, M.', 'Mostafavi, E.', 'Ghiasi, S.M.']]