Я могу подобраться, но может потребоваться дальнейшая обработка. Вероятно, лучше выполнить разбиение строк вручную, особенно если данные надежно отформатированы.
код
import re
string1 = '152: Ashkenazi A, Benlifer A, Korenblit J, Silberstein SD.'
string2 = '152: Ashkenazi A, Benlifer A, Korenblit J, Silberstein SD, Hattingh CJR.'
for i in [string1, string2]:
print re.findall(r'(\d+):|(?:[.,\s?])?(.*?)(?:[.,])', i)
выход
[('152', ''), ('', 'Ashkenazi A'), ('', 'Benlifer A'), ('', 'Korenblit J'), ('', 'Silberstein SD')]
[('152', ''), ('', 'Ashkenazi A'), ('', 'Benlifer A'), ('', 'Korenblit J'), ('', 'Silberstein SD'), ('', 'Hattingh CJR')]
Редактировать: используя 2 выражения
Если вы хотите использовать два выражения регулярных выражений, это можно сделать довольно безболезненно:
import re
string1 = '152: Ashkenazi A, Benlifer A, Korenblit J, Silberstein SD.'
string2 = '152: Ashkenazi A, Benlifer A, Korenblit J, Silberstein SD, Hattingh CJR.'
for i in [string1, string2]:
print re.findall(r'^(\d+):', i)
print re.findall(r'(?:[:,] )(\S+ [A-Z]+)(?=[\.,])', i)
производит
['152']
['Ashkenazi A', 'Benlifer A', 'Korenblit J', 'Silberstein SD']
['152']
['Ashkenazi A', 'Benlifer A', 'Korenblit J', 'Silberstein SD', 'Hattingh CJR']