为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Python 将名字拆分为名字、中间名和姓氏

使用 Python 将名字拆分为名字、中间名和姓氏

MMTTMM 2024-01-04 15:40:16
所以我基本上要求我有一个名字,我需要将它分成三个部分,并使用 Python 将其存储到三个不同的变量中。例如:姓名=“约翰·韦恩·史密斯”那么期望的输出应该是:名字=约翰中间名=韦恩姓氏 = 史密斯另外,我想检查一下,如果某个人的中间名不存在,那么它应该是空白的。
查看完整描述

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)


查看完整回答
反对 回复 2024-01-04
?
喵喔喔

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}")



查看完整回答
反对 回复 2024-01-04
?
ibeautiful

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将从头到尾匹配整个字符串。请确保事先清理并验证您的输入,因为正则表达式对于它们不期望的输入有些脆弱。


查看完整回答
反对 回复 2024-01-04
?
翻阅古今

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


查看完整回答
反对 回复 2024-01-04
?
开心每一天1111

TA贡献1836条经验 获得超13个赞

Python 有一个称为“解包”的功能,它允许您从列表中解构对象。有问题的列表来自调用split字符串上的方法。它需要一个字符串来分割。要解包,您必须具有以下形式的声明[a, b, c] = list,其中 a、b 和 c 是您希望解包(按顺序)的对象。所以你的代码是

[first, middle, last] = 'John Wayne Smith'.split(' ')


查看完整回答
反对 回复 2024-01-04
  • 5 回答
  • 0 关注
  • 87 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信