Извлечение имени как фамилии имени в python

У меня есть текстовый файл со строками:

Acosta, Christina, M.D. is a heart doctor

Alissa Russo, M.D. is a heart doctor

есть ли способ преобразовать строку ниже:

Acosta, Christina, M.D. is a heart doctor

to

Christina Acosta, M.D. is a heart doctor

Ожидаемый результат:

Christina Acosta, M.D. is a heart doctor
Alissa Russo, M.D. is a heart doctor

person Slickmind    schedule 02.08.2018    source источник


Ответы (3)


Вы можете использовать следующее регулярное выражение, чтобы сгруппировать имя и фамилию и заменить их в обратном порядке без запятой:

import re
data = '''Acosta, Christina, M.D. is a heart doctor
Alissa Russo, M.D. is a heart doctor'''
print(re.sub(r"([a-z'-]+), ([a-z'-]+)(?=,\s*M.D.)", r'\2 \1', data, flags=re.IGNORECASE))

Это выводит:

Christina Acosta, M.D. is a heart doctor
Alissa Russo, M.D. is a heart doctor
person blhsing    schedule 02.08.2018
comment
Большое спасибо - person Slickmind; 02.08.2018
comment
Небольшая поправка, просто замените MD на . потому что формат не всегда одинаков в данных, которые у меня есть print(re.sub(r([az'-]+), ([az'-]+)(?=,\s*.) , r'\2 \1', data, flags=re.IGNORECASE)) - person Slickmind; 02.08.2018

testline = 'Acosta, Christina, M.D. is a heart doctor'
a = testline.split(',', 1)
b = a[1].split(',',1)
newstring = b[0]+' '+a[0]+','+ b[1]
print newstring

ваш вывод должен быть: Christina Acosta, M.D. is a heart doctor

person Han Jinn    schedule 02.08.2018

Попробуй это

import re
pattern = "(\w+), (\w+), M.D. is a heart doctor"
my_string = "Acosta, Christina, M.D. is a heart doctor"
re.sub(pattern, r"\2 \1, M.D. is a heart doctor", my_string)

В шаблоне мы указываем две группы, а затем используем их в подстановке, ссылаясь на них с помощью \1 и \2

person aaldilai    schedule 02.08.2018
comment
он потерпит неудачу, если это будет Акоста, Кристина, ПТ - кардиолог. Я ценю помощь. Спасибо - person Slickmind; 02.08.2018