首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将authorship字符串划分为authors

将authorship字符串划分为authors
EN

Stack Overflow用户
提问于 2015-08-21 23:13:24
回答 2查看 42关注 0票数 3

我正在尝试设计一种聪明的方法来划分作者字符串,问题是字符串使用逗号不仅用于作者之间的分隔,而且还用于他们的名字和姓氏之间的分隔。因此,举个例子:

代码语言:javascript
复制
"LastName1, F.N., LastName2, S.N, Lastname3, T."

我可以使用一些标记化函数来将字符串除以标记,然后将它们连接起来,但我不认为这是健壮的:

代码语言:javascript
复制
def tokenize(str, token=','):
  return [x for x in re.split(r'\s*%s\s*' % token,str) if x]

def grouper(iterable, n, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx"
    args = [iter(iterable)] * n
    return itertools.zip_longest(*args, fillvalue=fillvalue)

auth = "LastName1, F.N., LastName2, S.N, Lastname3, T."
tmp1 = tokenize(auth)
tmp2 = grouper(tmp1, 2)
print(["{} {}".format(*i) for i in tmp2]) 

运行此代码将返回:

代码语言:javascript
复制
['LastName1 F.N.', 'LastName2 S.N', 'Lastname3 T.']

有没有更好的(更健壮的)方法来做到这一点?

EN

回答 2

Stack Overflow用户

发布于 2015-08-21 23:25:16

下面是一个真正简单的记号赋予器,它是专门为逗号编写的(所以很清楚它在做什么):

代码语言:javascript
复制
def tokenize(str):
    return re.findall(r'([^,]*,[^,]*),?', str)

它查找字符串、逗号、字符串以及可选的尾随逗号,返回所有匹配项。

票数 0
EN

Stack Overflow用户

发布于 2015-08-21 23:32:49

这是你想要的吗?

代码语言:javascript
复制
>>> auth = 'LastName1, F.N., LastName2, S.N, Lastname3, T.'
>>> names = tuple(map(str.strip, auth.split(',')))
>>> assert not len(names) & 1, 'names must come in pairs'
>>> data = [names[offset:offset+2][::-1] for offset in range(0, len(names), 2)]
>>> print(data)
[('F.N.', 'LastName1'), ('S.N', 'LastName2'), ('T.', 'Lastname3')]

它提供了一个名字和姓氏对的列表。

编辑:

以下是基于您的评论的更正。

代码语言:javascript
复制
>>> auth = 'LastName1, F.N., LastName2, S.N, Lastname3, T.'
>>> names = tuple(map(str.strip, auth.split(',')))
>>> assert not len(names) & 1, 'names must come in pairs'
>>> data = [' '.join(names[index:index+2]) for index in range(0, len(names), 2)]
>>> print(data)
['LastName1 F.N.', 'LastName2 S.N', 'Lastname3 T.']

现在的输出看起来与您想要的完全相同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32143863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档