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

所以我基本上要求我有一个名字,我需要将它分成三个部分,并使用 Python 将其存储到三个不同的变量中。

例如:

姓名=“约翰·韦恩·史密斯”

那么期望的输出应该是:

名字=约翰

中间名=韦恩

姓氏 = 史密斯

另外,我想检查一下,如果某个人的中间名不存在,那么它应该是空白的。


MMTTMM
浏览 250回答 5
5回答

呼如林

库nameparse是您问题的完美解决方案。您可以通过以下方式安装它pip 安装名称解析器在您的代码中,将此库导入为:from nameparser import HumanNamename = "John Wayne Smith"name_parts = HumanName(name)name_parts.titlename_parts.firstname_parts.middlename_parts.lastname_parts.suffixname_parts.nicknamename_parts.surnames  # (middle + last)name_parts.initials  # (first initial of each name part)

喵喔喔

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

ibeautiful

我们可以使用以下正则表达式:(?P<First>\S+)\s(?:(?P<Middle>\S*)\s)?(?P<Last>\S+)$它查找名字和姓氏,以及可选的中间名。例子import res = "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将从头到尾匹配整个字符串。请确保事先清理并验证您的输入,因为正则表达式对于它们不期望的输入有些脆弱。

翻阅古今

您可以使用str.split并len检查结果:name = "John Wayne Smith"parts = name.split(maxsplit=3)if len(parts) == 3:&nbsp; &nbsp; first, middle, last = partselse:&nbsp; &nbsp; first = parts[0]&nbsp; &nbsp; middle = ""&nbsp; &nbsp; last = parts[-1]print([first, middle, last])

开心每一天1111

Python 有一个称为“解包”的功能,它允许您从列表中解构对象。有问题的列表来自调用split字符串上的方法。它需要一个字符串来分割。要解包,您必须具有以下形式的声明[a, b, c] = list,其中 a、b 和 c 是您希望解包(按顺序)的对象。所以你的代码是[first,&nbsp;middle,&nbsp;last]&nbsp;=&nbsp;'John&nbsp;Wayne&nbsp;Smith'.split('&nbsp;')
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python