将人名拆分为名字和姓氏
好的,简单来说,我想问的是关于名字的问题。我希望能把名字放在一个输入框里,而不是分成名字和姓氏两个输入框。
那么,有没有办法把这个名字拆分开,只取出最后一个词呢?比如:
name = "Thomas Winter"
print name.split()
这样输出的结果就只会是“Winter”。
18 个回答
这是一个比较老的问题,但我在寻找从拼凑在一起的名字中提取部分内容的解决方案时发现了它。
http://code.google.com/p/python-nameparser/
更新:这个项目已经迁移到 https://github.com/derek73/python-nameparser
从一个输入中分开名字的问题在于,如果有人姓氏中有空格,你就无法得到完整的姓氏。而且我觉得你很难写出代码来完全处理这个情况。
我建议如果可能的话,最好单独询问每个名字。
你会发现,这种方法的主要问题不是技术上的,而是人性上的——不同的人写名字的方式各不相同。
其实,“名字”和“姓氏”这两个词本身就有问题。
很多混合家庭会用连字符的姓,比如“史密斯-琼斯”,但也有一些家庭会把两个名字分开写,比如“史密斯 琼斯”,这两个名字都是姓。
许多欧洲的姓氏有多个部分,比如“德·维尔”和“范·登·奈乌拉尔”。有时候这些额外的部分有重要的家族历史,比如几百年前国王授予的前缀。
顺便提一下:我在提到这些人时,正确地把这些名字的大写字母使用了——对于某些家庭,“de”和“van den”是不需要大写的,但对其他家庭则需要。
相反,许多亚洲文化把姓放在前面,因为家族被认为比个人更重要。
最后一点,有些人非常重视“Junior”(小)或“Senior”(大)或“III”(第三代)这些称谓,你的代码不应该把这些当作姓。
另外,还有很多人使用的名字并不是父母给的名字,我用过以下这种方案,效果还不错:
全名(通常用于写信时的名字); 姓; 常用名(在日常对话中常用的名字)。
例如:
全名:威廉·盖茨三世;姓:盖茨;常用名:比尔
全名:宋丽;姓:宋;常用名:丽莎