2012-05-18 27 views
1

我有一些數據需要在插入到數據庫之前清理。每一行代表一份出版物,其中一些有不同的格式。唯一的相似之處是每條記錄都在同一行。例如。在Python中分組字符

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

預期產量? –

+0

我想要一個製表符分隔的文本文件,將作者與其他內容分開。 – aeupinhere

回答

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.']] 
+1

好!多麼好的方式結束一個漫長的一週!非常感謝... – aeupinhere