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
相关产品推荐
相关产品推荐

