Python中的字符分组

Python中的字符分组,python,regex,string,Python,Regex,String,我有一些数据需要在插入数据库之前清理。每行代表一个出版物,其中一些具有不同的格式。唯一的相似之处是每条记录都在同一行上。例如 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 serogr

我有一些数据需要在插入数据库之前清理。每行代表一个出版物,其中一些具有不同的格式。唯一的相似之处是每条记录都在同一行上。例如

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行有一个逗号,用中间的首字母分隔姓氏。我想将所有作者分组,并将他们放在作者字段中,或者甚至将他们放在自己的专栏中。为了做到这一点,将这些作者彼此分开的最佳方式是什么?这不是一项容易的任务;-)

当格式不一致时,这可能会变得棘手,因为您需要做出一些假设。我为这个解决方案所做的假设是,人们的名字不会超过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.']]

当格式不一致时,这可能会变得棘手,因为您需要做出一些假设。我为这个解决方案所做的假设是,人们的名字不会超过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.']]

我想要一个制表符分隔的文本文件,用于将作者与其他内容分开。我想要一个制表符分隔的文本文件,用于将作者与其他内容分开。