【发布时间】:2012-12-16 18:33:36
【问题描述】:
我有一个名字列表,我试图从字符串列表中提取出来。我不断收到误报,例如部分匹配。另一个需要注意的是,我希望它还可以在适用的情况下获取姓氏。
names = ['Chris', 'Jack', 'Kim']
target = ['Chris Smith', 'I hijacked this thread', 'Kimberly','Christmas is here', 'CHRIS']
desired_output = ['Chris Smith', 'Kimberly', 'CHRIS']
我试过这段代码:
[i for e in names for i in target if i.startswith(e)]
这可以预见地返回克里斯史密斯,圣诞节到了,金伯利。
我将如何最好地解决这个问题?使用正则表达式还是可以使用列表推导来完成?性能可能是个问题,因为实名列表的长度约为 880,000 个。
(python 2.7)
编辑:我已经意识到我在这个例子中的标准是不切实际的,因为在排除圣诞节的同时想要包括 Kimberly 是不可能的要求。为了缓解这个问题,我找到了一个更完整的名单,其中包括变体(包括 Kim 和 Kimberly)。
【问题讨论】:
-
为什么输出中有
CHRIS,而不是I hijacked this thread? -
到目前为止你尝试过什么方法?
-
如果
'Kimberly'在输出中,那么为什么'Christmas is here'会丢失? -
@Ashwini 实际上,据我们所知,我认为整个目标是可行的
-
对不起,扩大了描述