Регулярные выражения Python - разбить строку на некоторые значения, но не на все - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь создать функцию для разделения списка имен.

name_ex = 'Futrelle, Mrs. Jacques Heath (Lily May Peel)'

split_name =re.split('\. |, | ', name_ex)
last_name = split_name[0]
title = split_name[1]
other_names = split_name[2:]

Вывод, когда я печатаю split_name, ниже

['Futrelle', 'Mrs', 'Jacques', 'Heath', '(Lily', 'May', 'Peel)']

Однако чего я хочу достичьis:

['Futrelle', 'Mrs', 'Jacques', 'Heath', 'Lily May Peel']

Есть идеи, как мне этого добиться?

Дополнительный контекст - Некоторые имена не имеют дополнительного имени в скобках - Все имена в порядке фамилия, название, имя (отчество необязательно), имя в скобках

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

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

import re
name_ex = 'Futrelle, Mrs. Jacques Heath (Lily May Peel)'
new_data = re.findall('(?<=\()[\w\s]+(?=\))|\w+', name_ex)

Вывод:

['Futrelle', 'Mrs', 'Jacques', 'Heath', 'Lily May Peel']
0 голосов
/ 28 декабря 2018

Это должно помочь.

Демо:

import re

name_ex = 'Futrelle, Mrs. Jacques Heath (Lily May Peel)'
m = re.match(r"(?P<lname>[A-Za-z]+), (?P<title>[A-Za-z]+)\. (?P<fname>[A-Za-z]+)(?P<mname>[\sA-Za-z]+)? \((?P<bname>.*?)\)", name_ex)
if m:
    print(m.groups())

Вывод:

('Futrelle', 'Mrs', 'Jacques', ' Heath', 'Lily May Peel')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...