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

使用Python将名称拆分为名字、中间名和姓氏,python,Python,所以我基本上要求我有一个名字,我需要把它分成三部分,并使用Python将它存储到三个不同的变量中 例如: Name=“约翰·韦恩·史密斯” 然后,所需输出应为: 名字=约翰 中间名=韦恩 姓氏=史密斯 此外,我想检查一下,如果某个人的中间名不存在,那么它应该是空的。Python有一个名为“解包”的功能,允许您从列表中解构对象。问题列表来自对字符串调用split方法。它需要一个字符串来拆分。要解包,您必须有一个[a,b,c]=列表形式的声明,其中a,b和c是您希望解包的对象(按顺序)。所以你的代码

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

例如:

Name=“约翰·韦恩·史密斯”

然后,所需输出应为:

名字=约翰

中间名=韦恩

姓氏=史密斯


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

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

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

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


您可以使用
str.split
len
检查结果:

name=“约翰·韦恩·史密斯”
parts=name.split(maxsplit=3)
如果len(零件)==3:
第一、中间、最后=零件
其他:
第一个=零件[0]
中间=“”
最后=零件[-1]
打印([第一、中间、最后])

我们可以使用以下正则表达式:

(?P<First>\S+)\s(?:(?P<Middle>\S*)\s)?(?P<Last>\S+)$

请注意,
match
将从头到尾匹配整个字符串。请确保事先清理并验证您的输入,因为正则表达式对于它们不期望的输入来说有些脆弱。

python中不可能使用带空格的变量名。添加上下文以提高回答质量。它避免了被机器人标记或触发用户否决投票行为。EoR。谢谢你的解决方案。。。很适合我的情况…如果我的回答有用的话,请考虑一下投票。
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'}