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

如何在字符串向量中识别双词通用非字母数字分隔符并实现函数?

提取字符串向量中的通用非字母数字分隔符

我们可以编写一个R函数,专门处理这类由两段字母数字组成、中间用统一非字母数字分隔符连接的字符串向量,精准提取所有元素共用的分隔符。

函数实现

find_common_separator <- function(str_vec) {
  # 提取每个字符串中夹在两段字母数字之间的非字母数字分隔符
  separators <- stringr::str_extract(str_vec, "(?<=^[[:alnum:]]+)[^[:alnum:]]+(?=[[:alnum:]]+$)")
  
  # 检查是否存在不符合格式的字符串
  if (any(is.na(separators))) {
    stop("部分字符串不符合「字母数字+分隔符+字母数字」的格式")
  }
  
  # 确认所有元素使用的是同一种分隔符
  common_sep <- unique(separators)
  if (length(common_sep) != 1) {
    stop("向量中存在多种分隔符,无通用分隔符")
  }
  
  return(common_sep)
}

函数逻辑说明

  • 使用stringr::str_extract结合正则前后断言,精准匹配夹在两段字母数字之间的非字母数字内容,确保只提取中间的分隔符。
  • 先校验输入格式:如果有字符串无法提取到符合要求的分隔符,直接抛出错误提示。
  • 再校验分隔符的统一性:如果提取到多种分隔符,同样抛出错误;唯一的分隔符即为通用分隔符。

测试案例

# 测试first向量
first <- c("L2DF.L2DA", "L2G.L2DA", "L2L.L2DA", "L2M.L2DA", "L2P.L2DA", 
           "L2V.L2DA", "L2G.L2DF", "L2L.L2DF", "L2M.L2DF", "L2P.L2DF", "L2V.L2DF", 
           "L2L.L2G", "L2M.L2G", "L2P.L2G", "L2M.L2L", "L2P.L2L", "L2P.L2M", 
           "L2R.L2DA", "L2R.L2DF", "L2R.L2G", "L2R.L2L", "L2R.L2M", "L2R.L2P", 
           "L2V.L2R", "L2V.L2G", "L2V.L2L", "L2V.L2M", "L2V.L2P")
find_common_separator(first)
# 输出:[1] "."

# 测试second向量
second <- c("L2DF_L2DA", "L2G_L2DA", "L2L_L2DA", "L2M_L2DA", "L2P_L2DA", 
            "L2V_L2DA", "L2G_L2DF", "L2L_L2DF", "L2M_L2DF", "L2P_L2DF", "L2V_L2DF", 
            "L2L_L2G", "L2M_L2G", "L2P_L2G", "L2M_L2L", "L2P_L2L", "L2P_L2M", 
            "L2R_L2DA", "L2R_L2DF", "L2R_L2G", "L2R_L2L", "L2R_L2M", "L2R_L2P", 
            "L2V_L2R", "L2V_L2G", "L2V_L2L", "L2V_L2M", "L2V_L2P")
find_common_separator(second)
# 输出:[1] "_"

注意事项

  • 函数默认输入向量的每个元素都严格遵循「字母数字段+非字母数字分隔符+字母数字段」的格式,且每个元素仅有一个分隔符。
  • 若输入不符合上述规则,函数会抛出明确的错误提示,便于排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 10:32:39