所以基本上我需要解析一个名称并找到以下信息:
名字
首字母缩写(如果员工的名字首字母缩写为D.J.,请同时使用两个字母缩写)
姓氏(包括雇员的后缀,例如Jr.或III。包括在内)
所以这是我正在使用的界面:
输入:
names = ["D.J. Richies III", "John Doe", "A.J. Hardie Jr."]
for name in names:
print parse_name(name)
预期输出:
{'FirstName': 'D.J.', 'FirstInitial': 'D.J.', 'LastName': 'Richies III' }
{'FirstName': 'John', 'FirstInitial': 'J.', 'LastName': 'Doe' }
{'FirstName': 'A.J.', 'FirstInitial': 'A.J.', 'LastName': 'Hardie Jr.' }
在Regex上并不是很擅长,实际上这可能太过分了。我只是在猜测:
if name[1] == ".": # we have a name like D.J.?
嗯,对于您的简单示例名称,您可以执行以下操作。
# 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}
我发现此库对于解析名称非常有用。 https://code.google.com/p/python-nameparser/
没有通用的解决方案,解决方案将取决于您施加的约束。对于您在此处给出的规格,这是一个简单的解决方案,可以准确给出所需的内容
这基本上与Anurag Uniyal提供的解决方案相同,只是更加紧凑: