Python正则表达式-在某些值上分割字符串,但不是全部

时间:2018-12-28 15:03:20

标签: python regex

我正在尝试构建一个函数来拆分名称列表。

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)']

但是我想要实现的是:

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

有人知道我将如何实现这一目标吗?

其他上下文 -有些名称在方括号中没有其他名称 -所有名称均按照姓,名,名(中间名可选),方括号的顺序排列

2 个答案:

答案 0 :(得分:1)

这应该有帮助。

演示:

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')

答案 1 :(得分:0)

您可以匹配括号中的组,然后匹配后续字符:

+ CategoryInfo          : ObjectNotFound: (deactivate:String) [], CommandNotFoundE

输出:

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