我的人名数据库有问题。我想将名称缩写,而不要使用姓氏。姓氏用逗号分隔,不同的人用分号分隔,例如以下示例:
Michael, Jordan; Bird, Larry;
如果名称是一个单词,则代码将如下所示:
breve$autor <- str_replace_all(breve$autor, "[:lower:]{1,}\\;", ".\\;")
结果与以下代码:
Michael, J.; Bird, L.;
问题出在化合物名称中。使用此代码,名称:
Jordan, Michael Larry;
这将是:
Jordan, Michael L.;
有人可以告诉我如何删除逗号和分号之间的所有小写字母吗?它看起来像这样:
Jordan, M.L.;
最佳答案
这是另一种解决方案:
x1 <- 'Michael, Jordan; Bird, Larry;'
x2 <- 'Jordan, Michael Larry;'
gsub('([A-Z])[a-z]+(?=[ ;])', '\\1.', x1, perl = TRUE)
# [1] "Michael, J.; Bird, L.;"
gsub('([A-Z])[a-z]+(?=[ ;])', '\\1.', x2, perl = TRUE)
# [1] "Jordan, M. L.;"
姓氏后跟
,
,部分名称后跟
或;
。在这里,我使用(?=[ ;])
来确保要匹配的模式之后的以下字符是空格或分号。要删除
M.
和L.
之间的空间,需要执行另一个步骤:gsub('\\. ', '.', gsub('([A-Z])[a-z]+(?=[ ;])', '\\1.', x2, perl = TRUE))
# [1] "Jordan, M.L.;"