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

时间:2020-10-26 11:03:38

标签: python

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

例如:

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

则所需的输出应为:

名字=约翰

中间名=韦恩

姓氏=史密斯

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

4 个答案:

答案 0 :(得分:1)

使用拆分功能创建具有名称的列表 第一个是名字,第二个是您的姓氏,如果名称长度等于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}")

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

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