现在有什么方法可以分割这个名字吗?并从“句子”中取出最后一句话,例如
name = "Thomas Winter"
print name.split()
什么输出只是“冬天”
答案 0 :(得分:63)
你会发现这种方法的关键问题不是技术问题,而是人类问题 - 不同的人用不同的方式写出自己的名字。
事实上,“姓”和“姓”的术语本身就存在缺陷。
虽然许多混合家庭使用带连字符的姓氏,例如Smith-Jones,但有些人只是单独使用这两个名字,“史密斯琼斯”,其中两个名字都是姓氏。
许多欧洲家族的名字有多个部分,例如“de Vere”和“van den Neiulaar”。有时这些额外的东西有重要的家族历史 - 例如,几百年前由国王授予的前缀。
附带问题:我已经正确地将这些资本化为我所引用的人 - “de”和“van den”不会为某些家庭获得大写字母,而是为其他人做。
相反,许多亚洲文化将姓氏放在首位,因为家庭被认为比个人更重要。
最后一点 - 有些人非常喜欢“初级”或“高级”或“III” - 而且您的代码不应将其视为姓氏。
同时注意到有相当数量的人使用的名称不是父母赋予的名称,我使用了以下方案并取得了一些成功:
全名(通常用于处理邮件); 姓; 已知为(会话中常用的名称)。
e.g:
全名:William Gates III;姓氏:盖茨;已知:比尔
全名:宋李;姓氏:宋;被称为:丽莎
答案 1 :(得分:14)
尝试从单个输入中拆分名称的问题在于,对于姓氏中包含空格的人,您将无法获得完整的姓氏,我不相信您将能够编写代码来管理该名称完全。
如果可能的话,我建议您单独询问名称。
答案 2 :(得分:10)
这是一个相当古老的问题,但我发现它正在寻找一种解决方案来解析整体名称中的碎片。
答案 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代码项目:
答案 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:])