-
呼如林
库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: first, middle, last = partselse: first = parts[0] middle = "" last = parts[-1]print([first, middle, last])
-
开心每一天1111
Python 有一个称为“解包”的功能,它允许您从列表中解构对象。有问题的列表来自调用split字符串上的方法。它需要一个字符串来分割。要解包,您必须具有以下形式的声明[a, b, c] = list,其中 a、b 和 c 是您希望解包(按顺序)的对象。所以你的代码是[first, middle, last] = 'John Wayne Smith'.split(' ')