R语言使用grep相关功能提取含特殊字符字符串中数字并求和
R字符串数字提取与求和实现方案
核心实现逻辑
- 优先匹配括号包裹的两位数,再匹配单个数字/末尾的x,避免拆分括号内的两位数
- 提取后统一转为数值格式,x默认映射为11,可根据业务需求调整映射规则
- 返回结果为数值向量,天然支持按索引取单个值、直接求和操作
完整代码
# 加载依赖包,tidyverse用户可直接调用 library(stringr) library(dplyr) # 定义数字提取函数 extract_nums <- function(input_str) { # 正则匹配两种模式:括号内的两位数 / 单个数字或x match_res <- str_match_all(input_str, "\\((\\d{2})\\)|([\\dx])")[[1]] # 提取有效匹配值:优先取括号内的两位数,无括号则取单个字符 raw_values <- ifelse(!is.na(match_res[,2]), match_res[,2], match_res[,3]) # 转换为数值格式,x映射为11 num_values <- ifelse(raw_values == "x", 11, as.numeric(raw_values)) return(num_values) }
功能测试
示例字符串测试
# 输入用户提供的示例字符串 s <- "123(11)56(10)89" # 提取所有数字 result <- extract_nums(s) result # 输出:1 2 3 11 5 6 10 8 9 # 访问第5个数字 result[5] # 输出:5 # 所有数字求和 sum(result) # 输出:55
其他场景适配测试
# 场景1:无括号、末尾带x的字符串 s1 <- "123456789x" extract_nums(s1) # 输出:1 2 3 4 5 6 7 8 9 11 # 场景2:多个括号位置随机的字符串 s2 <- "1(22)34(33)567" extract_nums(s2) # 输出:1 22 3 4 33 5 6 7
内容的提问来源于stack exchange,提问作者Metsfan
相关产品推荐
相关产品推荐

