将一个人的名字拆分为姓氏和姓氏

时间:2008-11-03 19:19:09

标签: python split

好吧基本上我问的是他们的名字问题 我希望这是一个输入,而不是Forename和Surname。

现在有什么方法可以分割这个名字吗?并从“句子”中取出最后一句话,例如

name = "Thomas Winter"
print name.split() 

什么输出只是“冬天”

16 个答案:

答案 0 :(得分:63)

你会发现这种方法的关键问题不是技术问题,而是人类问题 - 不同的人用不同的方式写出自己的名字。

事实上,“姓”和“姓”的术语本身就存在缺陷。

虽然许多混合家庭使用带连字符的姓氏,例如Smith-Jones,但有些人只是单独使用这两个名字,“史密斯琼斯”,其中两个名字都是姓氏。

许多欧洲家族的名字有多个部分,例如“de Vere”和“van den Neiulaar”。有时这些额外的东西有重要的家族历史 - 例如,几百年前由国王授予的前缀。

附带问题:我已经正确地将这些资本化为我所引用的人 - “de”和“van den”不会为某些家庭获得大写字母,而是为其他人做。

相反,许多亚洲文化将姓氏放在首位,因为家庭被认为比个人更重要。

最后一点 - 有些人非常喜欢“初级”或“高级”或“III” - 而且您的代码不应将其视为姓氏。

同时注意到有相当数量的人使用的名称不是父母赋予的名称,我使用了以下方案并取得了一些成功:

全名(通常用于处理邮件); 姓; 已知为(会话中常用的名称)。

e.g:

全名:William Gates III;姓氏:盖茨;已知:比尔

全名:宋李;姓氏:宋;被称为:丽莎

答案 1 :(得分:14)

尝试从单个输入中拆分名称的问题在于,对于姓氏中包含空格的人,您将无法获得完整的姓氏,我不相信您将能够编写代码来管理该名称完全。

如果可能的话,我建议您单独询问名称。

答案 2 :(得分:10)

这是一个相当古老的问题,但我发现它正在寻找一种解决方案来解析整体名称中的碎片。

http://code.google.com/p/python-nameparser/

答案 3 :(得分:6)

数据的黄金法则 - 不要过早聚合 - 将字段粘合在一起比分离它们要容易得多。大多数人还有一个中间名,应该是一个可选字段。有些人有很多中间人。有些人只有一个单词one name。一些文化通常都有一个中间名字典,向家族树致敬,回到Golgafrincham Ark登陆。

您不需要此处的代码解决方案 - 您需要业务规则。

答案 4 :(得分:5)

一个简单的方法来完成你在python中提出的要求

name = "Thomas Winter"
LastName = name.split()[1]

(注意函数调用拆分上的parantheses。)

split()创建一个列表,其中每个元素都来自原始字符串,由空格分隔。您现在可以使用name.split()[1]获取第二个元素,或使用name.split()[ - 1]

获取最后一个元素

然而,正如其他人所说,除非你确定你只是得到一个像“First_Name Last_Name”这样的字符串,否则会涉及更多问题。

答案 5 :(得分:4)

如果您尝试在PHP中解析人名,我建议Keith Beckman's nameparse.php script

答案 6 :(得分:4)

这就是我在申请中的表现:

def get_first_name(fullname):
    firstname = ''
    try:
        firstname = fullname.split()[0] 
    except Exception as e:
        print str(e)
    return firstname

def get_last_name(fullname):
    lastname = ''
    try:
        index=0
        for part in fullname.split():
            if index > 0:
                if index > 1:
                    lastname += ' ' 
                lastname +=  part
            index += 1
    except Exception as e:
            print str(e)
    return lastname

def get_last_word(string):
    return string.split()[-1]

print get_first_name('Jim Van Loon')
print get_last_name('Jim Van Loon')
print get_last_word('Jim Van Loon')

答案 7 :(得分:3)

像这样:

print name.split()[-1]

答案 8 :(得分:2)

拆分名称比看起来更难。有些名字有两个字的姓氏;有些人会输入第一,中间和姓氏;有些名字有两个工作名。处理名称的更可靠(或最不可靠)的方法是始终在单独的字段中捕获名字和姓氏。当然,这会引发自己的问题,例如如何处理只有一个名字的人,确保它适用于具有不同名称部分顺序的用户。

姓名很难,小心处理。

答案 9 :(得分:2)

由于人们如何写出他们的名字有很多不同的变化,但这里是通过正则表达式获得名/姓的基本方法。

import re
p = re.compile(r'^(\s+)?(Mr(\.)?|Mrs(\.)?)?(?P<FIRST_NAME>.+)(\s+)(?P<LAST_NAME>.+)$', re.IGNORECASE)
m = p.match('Mr. Dingo Bat')
if(m != None):
  first_name = m.group('FIRST_NAME')
  last_name = m.group('LAST_NAME')

答案 10 :(得分:1)

这绝对是一项比表面上看起来更复杂的任务。我写了一些挑战以及我在博客上解决它的算法。如果您想要PHP中的最新版本,请务必查看我的Google代码项目:

http://www.onlineaspect.com/2009/08/17/splitting-names/

答案 11 :(得分:0)

你可能想要使用rsplit:

rsplit([sep [,maxsplit]])

使用sep作为分隔符字符串,返回字符串中的单词列表。如果给出maxsplit,则最多完成maxsplit分割,最右边的分割。如果未指定sep或None,则任何空格字符串都是分隔符。除了从右边分割之外,rsplit()的行为类似于split(),下面将详细介绍。版本2.4中的新功能。

答案 12 :(得分:0)

Here's how to do it in SQL。但是用这种东西进行数据规范化真的是一种熊。我同意Dave DuPlantis关于要求单独输入的内容。

答案 13 :(得分:0)

我会指定标准格式(某些表单使用它们),例如“请在名字,姓氏表格中写下你的名字”。

它使您更容易,因为名称通常不包含逗号。它还会验证您的用户是否实际输入了名字和姓氏。

答案 14 :(得分:0)

name = "Thomas Winter"
first, last = name.split()
print("First = {first}".format(first=first))
#First = Thomas
print("Last = {last}".format(last=" ".join(last)))
#Last = Winter

答案 15 :(得分:0)

您可以为此使用str.find()

x=input("enter your name ")
l=x.find(" ")
print("your first name is",x[:l])
print("your last name is",x[l:])