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

R语言拆分含括号包裹两位数的编码测试字符串方法咨询

R实现带括号测试结果字符串的拆分方法

核心思路

不用空分隔符拆分字符串,改为直接匹配所有符合规则的结果单元:

  • 被()包裹的多位数字
  • 单个数字字符

使用正则表达式\\((\\d+)\\)|\\d即可覆盖两种规则,提取匹配内容后移除括号就能得到目标结果。

具体实现

方法1:base R原生实现

不需要额外安装依赖包,用regmatches+gregexpr完成提取:

# 测试用例
test_str1 <- "2069"
test_str2 <- "2(10)1(12)"

# 封装提取函数
extract_test_res <- function(input_str) {
  pattern <- "\\((\\d+)\\)|\\d"
  # 匹配所有符合规则的单元
  match_items <- regmatches(input_str, gregexpr(pattern, input_str))[[1]]
  # 移除括号得到最终结果
  gsub("\\(|\\)", "", match_items)
}

# 效果验证
extract_test_res(test_str1)
# 输出:"2" "0" "6" "9"
extract_test_res(test_str2)
# 输出:"2" "10" "1" "12"

方法2:stringr包简洁实现

如果日常使用tidyverse生态,可以用str_extract_all简化代码:

library(stringr)

extract_test_res_str <- function(input_str) {
  str_remove_all(str_extract_all(input_str, "\\(\\d+\\)|\\d")[[1]], "[()]")
}

批量处理方案

如果需要一次性处理多个编码字符串,可直接向量化操作:

str_vec <- c("2069", "2(10)1(12)", "9(15)3(21)4")
result_list <- lapply(str_extract_all(str_vec, "\\(\\d+\\)|\\d"), function(x) gsub("[()]", "", x))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:27:05