python - 将作者字符串划分为作者

标签 python parsing tokenize

我正在尝试设计一种巧妙的方法来划分作者字符串,问题是该字符串不仅使用逗号来分隔作者,还使用逗号来分隔他们的名字和姓氏。所以一个例子是:

"LastName1, F.N., LastName2, S.N, Lastname3, T."

我可以使用一些标记化函数将字符串按标记划分,然后再加入它们,但我认为这不是可靠的:

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]) 

运行这段代码返回:

['LastName1 F.N.', 'LastName2 S.N', 'Lastname3 T.']

是否有更好(更强大)的方法来做到这一点?

最佳答案

这是一个真正简单的分词器,专门为逗号编写的,(所以很清楚它在做什么):

def tokenize(str):
    return re.findall(r'([^,]*,[^,]*),?', str)

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

关于python - 将作者字符串划分为作者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32143863/

相关文章:

用于提取标签和单词的 Python 正则表达式

python - 扭曲列表列表

python - geopy 的 GeocoderServiceError

python - 这个用于计算食物账单的 python 代码有什么问题?

python - 如何找到dask.delayed任务的输入?

java - 如何通过Javax.xml库解析XML标签

parsing - 如何在 monad 转换器解析器组合器中限制回溯

c++ - C/C++ 解析器/词法分析器如何区分指针的 '*' 和乘法的 '*'?

python - PyCrypto 在 Windows 上安装错误

java - 文件标记器错误