【发布时间】:2018-04-24 14:13:51
【问题描述】:
以下是我正在处理的代码,我无法从名称列表中提取名字和姓氏。代码不断给我错误太多的值来解压可能是因为例如这个名字 ELSWOCK Rick Jr 有第一个中间名和姓氏。这里 Rick Jr 应该是名字,Elswock 是姓氏。
names=[' HE XF, Wei W, Liu ZZ, Shen XL',' STARK LE, AARON FIN, LEO DE CAP, ADAM FORTH, KARAN SINGH',' ELSWICK RICK Jr, ASTO FON, SAM MARLON, KIM ZENG']
names1 = []
for l1 in names:
names1.append(l1.split(',')) #To split the line based on commas
first_names=[]
last_names=[]
for line in names1:
last,first= line[0][:].split()
first_names.append(first)
last_names.append(last)
导致此错误:
回溯(最近一次通话最后一次):
文件“”,第 10 行,在 last,first= line[0][:].split()ValueError:解包的值太多(预计 2 个)
我期望的输出是这样的:
first_names=[ 'XF, W, ZZ, XL', 'LE, FIN, CAP, FORTH, SINGH', 'RICK Jr, FON, MARLON, ZENG' ]
last_names=[' HE, Wei, Liu, Shen',' STARK, AARON, LEO DE, ADAM, KARAN',' ELSWICK, ASTO, SAM, KIM']
【问题讨论】:
-
LEO DE CAP将在line[0][:].split()中为您提供LEO、DE和CAP。您需要指定要拆分的位置,这与这样的名称无关。 -
输入应该是
names=[' HE XF, Wei W, Liu ZZ, Shen XL',' STARK LE, AARON FIN, LEO DE CAP, ADAM FORTH, KARAN SINGH',' ELSWICK RICK Jr, ASTO FON, SAM MARLON, KIM ZENG']还是names=[' HE XF, Wei W, Liu ZZ, Shen XL STARK LE, AARON FIN, LEO DE CAP, ADAM FORTH, KARAN SINGH , ELSWICK RICK Jr, ASTO FON, SAM MARLON, KIM ZENG']- 为什么在你的例子中有额外的','? -
使用
(?<fn>\b[A-Z]+\b(?: +[A-Z]*[a-z]+[a-zA-Z]*)?(?=,|$))作为名字。从原始字符串中提取并替换它们。然后用空字符串替换^ | (?=,)清理剩余数据。 -
还有,为什么
LEO DE是姓氏,而您提到Elswick Rick Jr应该以不同方式处理?
标签: python regex list dictionary split