好的,所以基本上我在问他们名字的问题,我希望这是一个输入,而不是名字和姓氏。
现在有什么方法可以拆分这个名字吗?并从“句子”中取出最后一个词,例如
name = "Thomas Winter"
print name.split()
输出的只是“冬天”
您会发现这种方法的关键问题不是技术问题,而是人类问题 - 不同的人以不同的方式书写他们的名字。
事实上,“姓”和“姓”的用语本身就有缺陷。
虽然许多混合家庭使用连字符的姓氏,例如 Smith-Jones,但有些人只是分别使用这两个名字,“Smith Jones”,其中两个名字都是姓氏。
许多欧洲姓氏有多个部分,例如“de Vere”和“van den Neiulaar”。有时这些临时演员有重要的家族历史——例如,几百年前国王授予的前缀。
附带问题:我已经为我所引用的人正确地大写了这些 - “de”和“van den”对于某些家庭没有大写字母,但对于其他家庭却有。
相反,许多亚洲文化将姓氏放在首位,因为家庭被认为比个人更重要。
最后一点 - 有些人非常重视“初级”或“高级”或“III” - 你的代码不应该将它们视为姓氏。
还注意到有相当多的人使用的名字不是他们父母赋予的名字,我使用了以下方案并取得了一些成功:
全名(通常用于寻址邮件);姓; Known As(谈话中常用的名称)。
例如:
全名:威廉·盖茨三世;姓氏:盖茨;别名:比尔
全名:宋丽;姓氏:宋;别名:丽莎
尝试从单个输入中拆分姓名的问题在于,您将无法获得姓氏中有空格的人的完整姓氏,而且我不相信您将能够编写代码来完全管理它。
如果可能的话,我建议您单独询问姓名。
这是一个相当老的问题,但我发现它正在寻找一种解决方案来从一个全局名称中解析出片段。
一个简单的方法来完全按照你在 python 中的要求是
name = "Thomas Winter"
LastName = name.split()[1]
(注意函数调用 split 的括号。)
split() 创建一个列表,其中每个元素都来自您的原始字符串,由空格分隔。您现在可以使用 name.split()[1] 获取第二个元素或使用 name.split()[-1] 获取最后一个元素
然而,正如其他人所说,除非你确定你只是得到一个像“First_Name Last_Name”这样的字符串,否则会涉及更多的问题。
数据的黄金法则 - 不要太早聚合 - 将字段粘合在一起比将它们分开要容易得多。大多数人还有一个中间名,它应该是一个可选字段。有些人有过多的中间名。有些人只有一个名字,一个字。一些文化通常有一本中间名词典,向 Golgafrincham Ark 登陆的家谱致敬。
您在这里不需要代码解决方案 - 您需要一个业务规则。
这就是我在我的应用程序中的做法:
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')
像这样:
print name.split()[-1]
如果您尝试在 PHP 中解析人名,我推荐Keith Beckman 的 nameparse.php 脚本。
由于人们写名字的方式有很多不同的变化,但这里是通过正则表达式获取名字/姓氏的基本方法。
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')
拆分名称比看起来更难。有些名字有两个姓氏;有些人会输入名字、中间名和姓氏;有些名字有两个工作名字。处理姓名的更可靠(或最不可靠)的方法是始终在单独的字段中捕获名字和姓氏。当然,这会引发它自己的问题,比如如何处理只有一个名字的人,确保它适用于名字部分顺序不同的用户。
名字很难,小心处理。
这绝对是一项比表面上看起来更复杂的任务。我在博客上写了一些挑战以及解决它的算法。如果您想要 PHP 的最新版本,请务必查看我的 Google 代码项目:
您可能希望为此使用 rsplit:
rsplit([sep [,maxsplit]])
返回字符串中的单词列表,sep
用作分隔符字符串。如果maxsplit
给出,最多maxsplit
拆分完成,最右边的拆分。如果sep
未指定 or None
,则任何空白字符串都是分隔符。除了从右侧拆分外,rsplit()
其行为如下文split()
详细描述。2.4 版中的新功能。
这是在 SQL 中执行此操作的方法。但是用这种东西进行数据归一化真的很麻烦。我同意 Dave DuPlantis 关于要求单独输入的观点。
我会指定一种标准格式(某些表格使用它们),例如“请以名字,姓氏形式写下您的名字”。
它使您更容易,因为名称通常不包含逗号。它还验证您的用户是否实际输入了名字和姓氏。
name = "Thomas Winter"
first, last = name.split()
print("First = {first}".format(first=first))
#First = Thomas
print("Last = {last}".format(last=" ".join(last)))
#Last = Winter
你可以用str.find()
这个。
x=input("enter your name ")
l=x.find(" ")
print("your first name is",x[:l])
print("your last name is",x[l:])