5 回答
TA贡献1798条经验 获得超3个赞
库nameparse是您问题的完美解决方案。您可以通过以下方式安装它
pip 安装名称解析器
在您的代码中,将此库导入为:
from nameparser import HumanName
name = "John Wayne Smith"
name_parts = HumanName(name)
name_parts.title
name_parts.first
name_parts.middle
name_parts.last
name_parts.suffix
name_parts.nickname
name_parts.surnames # (middle + last)
name_parts.initials # (first initial of each name part)
TA贡献1735条经验 获得超5个赞
使用 split 函数创建包含名称的列表 第一个是名字 第二个是您的姓氏(如果名称长度等于 2)
names =Name.split()
if len(names) ==2 :
print("there is no middle name")
first_name = names[0]
last_name = names[1]
print(f" first name - {first_name}\n middle name - last name - {last_name}")
elif len(names) == 3:
print("there is middle name")
first_name = names[0]
middle_name = names[1]
last_name = names[2]
print(f" first name - {first_name}\n middle name - {middle_name} \nlast name - {last_name}")
TA贡献1993条经验 获得超5个赞
我们可以使用以下正则表达式:
(?P<First>\S+)\s(?:(?P<Middle>\S*)\s)?(?P<Last>\S+)$
它查找名字和姓氏,以及可选的中间名。
例子
import re
s = "John Wayne Smith"
s2 = "John Smith"
p = re.compile(r"(?P<First>\S+)\s(?:(?P<Middle>\S*)\s)?(?P<Last>\S+)$")
p.match(s).groupdict()
# {'First': 'John', 'Middle': 'Wayne', 'Last': 'Smith'}
p.match(s2).groupdict()
# {'First': 'John', 'Middle': None, 'Last': 'Smith'}
请注意,match将从头到尾匹配整个字符串。请确保事先清理并验证您的输入,因为正则表达式对于它们不期望的输入有些脆弱。
TA贡献1780条经验 获得超5个赞
您可以使用str.split并len检查结果:
name = "John Wayne Smith"
parts = name.split(maxsplit=3)
if len(parts) == 3:
first, middle, last = parts
else:
first = parts[0]
middle = ""
last = parts[-1]
print([first, middle, last])
TA贡献1836条经验 获得超13个赞
Python 有一个称为“解包”的功能,它允许您从列表中解构对象。有问题的列表来自调用split
字符串上的方法。它需要一个字符串来分割。要解包,您必须具有以下形式的声明[a, b, c] = list
,其中 a、b 和 c 是您希望解包(按顺序)的对象。所以你的代码是
[first, middle, last] = 'John Wayne Smith'.split(' ')
添加回答
举报