在R语言中如何按第一个括号将字符串分割为多个部分?
解决方案(R语言实现)
以下两种方案均可直接运行得到你需要的输出效果:
方法1:使用stringr包实现(代码更简洁)
若未安装该包,先运行install.packages("stringr")完成安装后再执行如下代码:
library(stringr) # 定义待处理字符串 st1 <- "realme C20 (Cool Blue, 32 GB)" st2 <- "realme C11 (2021) (Cool Grey, 2GB RAM, 32GB Storage)" # 自定义分割处理函数 split_by_bracket <- function(input_str) { # 提取第一个左括号前的前缀,去除首尾空格 prefix <- str_trim(str_extract(input_str, "^[^(]+")) # 提取所有括号内的内容 bracket_contents <- str_match_all(input_str, "\\((.*?)\\)")[[1]][,2] # 不足3个元素的位置补NA result <- c(prefix, bracket_contents, rep(NA_character_, 3 - length(c(prefix, bracket_contents)))) return(result) } # 测试输出 output1 <- split_by_bracket(st1) output2 <- split_by_bracket(st2) print(output1) print(output2)
运行输出:
> print(output1) [1] "realme C20" "Cool Blue, 32 GB" NA > print(output2) [1] "realme C11" "2021" "Cool Grey, 2GB RAM, 32GB Storage"
方法2:基础R实现(无需安装第三方包)
split_by_bracket_base <- function(input_str) { # 提取前缀 prefix <- trimws(sub("\\(.*", "", input_str)) # 匹配所有括号内容 match_pos <- gregexpr("\\((.*?)\\)", input_str, perl = TRUE) bracket_contents <- regmatches(input_str, match_pos)[[1]] # 去掉括号仅保留内部内容 bracket_contents <- gsub("^\\(|\\)$", "", bracket_contents) # 补全NA result <- c(prefix, bracket_contents, rep(NA_character_, 3 - length(c(prefix, bracket_contents)))) return(result) } # 测试输出 output1 <- split_by_bracket_base(st1) output2 <- split_by_bracket_base(st2) print(output1) print(output2)
运行效果和方法1完全一致。
内容的提问来源于stack exchange,提问作者Debojit Roy
相关产品推荐
相关产品推荐

