在Python中解析人的名字和姓氏

y2k*_*y2k 7 python parsing

非常感谢所有帮助过的人!

所以基本上我需要解析一个名字并找到以下信息:

名字

First Initial(如果员工的首字母缩写为DJ,则使用两个首字母)

姓氏(包括员工是否有后缀,如Jr.或III.)


所以这是我正在使用的界面:

输入:

names = ["D.J. Richies III", "John Doe", "A.J. Hardie Jr."]
for name in names:
   print parse_name(name)
Run Code Online (Sandbox Code Playgroud)

预期产出:

{'FirstName': 'D.J.', 'FirstInitial': 'D.J.', 'LastName': 'Richies III' }
{'FirstName': 'John', 'FirstInitial': 'J.', 'LastName': 'Doe' }
{'FirstName': 'A.J.', 'FirstInitial': 'A.J.', 'LastName': 'Hardie Jr.' }
Run Code Online (Sandbox Code Playgroud)

不是很擅长正则表达式,实际上这可能有点过头了.我只是在猜测:

if name[1] == ".":  # we have a name like D.J.?
Run Code Online (Sandbox Code Playgroud)

呃,我不知道,很久没有使用Python了.

任何帮助将不胜感激!谢谢 :)

非常感谢所有帮助过的人,你救了我的命!

小智 7

我发现这个库对于解析名称非常有用.https://code.google.com/p/python-nameparser/

它还可以处理格式为Lastname,Firstname的名称.


Dan*_*l G 3

好吧,对于简单的示例名称,您可以执行类似的操作。

# This separates the first and last names
name = name.partition(" ")
firstName = name[0]
# now figure out the first initial
# we're assuming that if it has a dot it's an initialized name,
# but this may not hold in general
if "." in firstName:
    firstInitial = firstName
else:
    firstInitial = firstName[0] + "."
lastName = name[2]
return {"FirstName":firstName, "FirstInitial":firstInitial, "LastName": lastName}
Run Code Online (Sandbox Code Playgroud)

我还没有测试过它,但是这样的函数应该可以在您提供的输入示例上完成工作。