标记名称的最佳方式

时间:2014-01-15 10:31:35

标签: python string tokenize

假设您有一个包含名称的字符串,如下所示:

"Leonard, A., Fraternali, F., Daraio, C."

现在,这个字符串中有三个人,我想找到获得这三个人的最好方法,因为字符串有时也可以:

"Leonard A., Fraternali F., Daraio C.",

即没有逗号。在我有一个如下功能之前:

def tokenize(str, token=','):
    return [x for x in re.split(r'\s*%s\s*' % token,str) if x]

但当然这在第一种情况下不起作用。 谢谢!

3 个答案:

答案 0 :(得分:0)

也许这样做

In [10]: re.split(r'\.,', "Leonard A., Fraternali F., Daraio C.")
Out[10]: ['Leonard A', ' Fraternali F', ' Daraio C.']

In [11]: re.split(r'\.,', "Leonard, A., Fraternali, F., Daraio, C.")
Out[11]: ['Leonard, A', ' Fraternali, F', ' Daraio, C.']

答案 1 :(得分:0)

这是你想要的吗?

def tokenize(line, token=','):
    splitline = line.split(token)
    names = []
    for name in splitline:
        name = name.strip()
        if len(name.replace(".", "") ) == 1:
            try:
                names[-1] = '%s %s' % (names[-1], name)
                continue
            except IndexError:
                pass
        names.append(name)
    return names


In: tokenize("Leonard A., Fraternali F., Daraio C.")
Out: ['Leonard A.', 'Fraternali F.', 'Daraio C.']

In: tokenize("Leonard, A., Fraternali, F., Daraio, C.")
Out: ['Leonard A.', 'Fraternali F.', 'Daraio C.']

答案 2 :(得分:0)

好的,如果你的名字都以点.结尾,那么这就行了:

>>> names = "Leonard A., Fraternali F., Daraio C.".split('.')
>>> names
>>> ['Leonard A', ', Fraternali F', ', Daraio C', '']
>>> names = [name.strip(', ') for name in names if name]
>>> names
['Leonard A', 'Fraternali F', 'Daraio C']