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

R语言如何删除字符串中的括号保留内部内容并生成两种名称形式

R语言处理带括号人名字符串解决方案

需求说明

对含括号的人名字符串做两种处理:

  • 方案1:删除括号,保留括号内的字符
  • 方案2:删除括号及括号内的字符
    无括号的字符串直接保留,最终输出所有处理结果的集合。

示例输入

df <- c ("Do(i)lfal", "Do(i)lferl", "Steff(l)", "Steffe", "Steffi")

示例期望输出

df <- c( "Doilfal", "Dolfal", "Doilferl", "Dolferl", "Steff", "Steffl", "Steffe", "Steffi")

可行代码

基础R实现(无需额外安装包)

# 自定义处理函数
process_name <- function(x) {
  # 无括号的字符串直接返回
  if (!grepl("\\([a-z]\\)", x)) {
    return(x)
  }
  # 捕获括号前内容、括号内字符、括号后内容三个分组
  parts <- regmatches(x, regexec("^(.*?)\\(([a-z])\\)(.*)$", x))[[1]]
  prefix <- parts[2]
  inner_char <- parts[3]
  suffix <- parts[4]
  # 按需求顺序返回两种处理结果,交换以下两行即可匹配示例输出顺序
  return(c(
    paste0(prefix, inner_char, suffix), # 保留括号内字符
    paste0(prefix, suffix) # 删除括号内字符
  ))
}

# 遍历所有名称,扁平化输出结果
processed_df <- unlist(lapply(df, process_name), use.names = FALSE)

代码说明

  1. 原有代码出错的核心原因是:正则捕获了带括号的整体作为分组,且仅做了同字符串内的拼接而非生成两个独立元素,无法得到拆分后的结果。
  2. 本次使用的正则^(.*?)\\(([a-z])\\)(.*)$采用非贪婪匹配.*?,可以准确拆分单括号结构的三个部分,完全适配示例场景。
  3. 如果数据集存在多括号的姓名,调整正则为匹配全局括号结构后批量处理即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:15:05