You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用stringr包格式化作者姓名的技术实现需求

使用stringr格式化作者姓名字符串

需求说明

需要将作者姓名转换为 LAST, 1st. 2nd. 3rd. ... 格式,具体规则及示例如下:

  • 单姓名示例:
    • Daenerys Targaryen → TARGARYEN, D.
    • George R. R. Martin → MARTIN, G. G. R.
    • Luís Inácio Lula da Silva → SILVA, L. I. L. da
  • 多姓名示例:
    • Daenerys Targaryen, Luís Inácio Lula da Silva → TARGARYEN, D.; SILVA, L. I. L. da

实现方案

使用stringr包结合正则表达式编写自定义函数,分别处理单姓名和多姓名场景:

  1. 加载依赖包
library(stringr)
library(purrr) # 用于批量处理多姓名
  1. 编写单姓名格式化函数
format_single_name <- function(name) {
  # 提取姓氏(最后一个首字母大写的单词,支持带重音字符)
  last_name <- str_extract(name, "\\b[A-ZÀ-ÿ][a-zÀ-ÿ]+$")
  # 提取姓氏以外的部分(名+可能的小写前缀)
  rest_part <- str_trim(str_remove(name, str_c("\\b", last_name, "$")))
  
  # 提取名的首字母(所有首字母大写的单词的首字母)
  initials <- str_extract_all(rest_part, "\\b[A-ZÀ-ÿ]")[[1]]
  initials_formatted <- str_c(initials, ".", collapse = " ")
  
  # 提取小写前缀(如果存在,即rest_part末尾的小写单词)
  prefix <- str_extract(rest_part, "\\b[a-zà-ÿ]+$")
  if (!is.na(prefix)) {
    initials_formatted <- str_c(initials_formatted, " ", prefix)
  }
  
  # 组合最终格式
  str_c(str_to_upper(last_name), ", ", initials_formatted)
}
  1. 测试单姓名格式化
format_single_name("Daenerys Targaryen")
# [1] "TARGARYEN, D."

format_single_name("George R. R. Martin")
# [1] "MARTIN, G. R. R."

format_single_name("Luís Inácio Lula da Silva")
# [1] "SILVA, L. I. L. da"
  1. 处理多姓名场景
    通过拆分字符串、批量处理、重新拼接实现:
format_multiple_names <- function(names_str) {
  # 按逗号+空格拆分多个姓名
  name_list <- str_split(names_str, ",\\s+")[[1]]
  # 批量格式化每个姓名后用分号+空格拼接
  str_c(map_chr(name_list, format_single_name), collapse = "; ")
}
  1. 测试多姓名格式化
format_multiple_names("Daenerys Targaryen, Luís Inácio Lula da Silva")
# [1] "TARGARYEN, D.; SILVA, L. I. L. da"

代码说明

  • 正则表达式\\b[A-ZÀ-ÿ][a-zÀ-ÿ]+$用于匹配最后一个首字母大写的姓氏,兼容带重音的特殊字符;
  • 提取名的首字母时,匹配所有首字母大写的单词,确保缩写覆盖所有名的部分;
  • 小写前缀(如da)会被识别并追加在名缩写之后,完全符合示例规则;
  • 使用purrr::map_chr实现批量处理多姓名,保证代码简洁高效。

内容的提问来源于stack exchange,提问作者Bruno Mioto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 05:35:50