在R语言中移除括号内的数字与冒号
在R语言中移除字符串括号内的数字和冒号
这里提供几种简洁的实现方式,针对示例输入AC1(d12:20)-OH,能直接得到期望输出AC1(d)-OH,同时支持处理多括号场景:
方法1:基础R + 正则环视(最简洁)
利用正则的正向环视定位括号内的数字和冒号,直接替换为空:
input_str <- "AC1(d12:20)-OH" # 开启perl正则支持环视语法 output_str <- gsub("(?<=\\()[0-9:]+(?=\\))", "", input_str, perl = TRUE) output_str # 输出结果:"AC1(d)-OH"
如果是多括号的情况,比如输入AB2(e3:45)CD(f67)-GH,运行后会得到AB2(e)CD(f)-GH,完全符合需求。
方法2:基础R + 嵌套替换
通过外层匹配整个括号内容,内层替换括号里的目标字符:
input_str <- "AC1(d12:20)-OH" output_str <- gsub("\\((.*?)\\)", function(x) { # 先去掉匹配到的字符串的首尾括号,再移除数字和冒号,最后重新加括号 inner_content <- gsub("[0-9:]", "", substr(x, 2, nchar(x)-1)) paste0("(", inner_content, ")") }, input_str) output_str # 输出结果:"AC1(d)-OH"
方法3:使用stringr包(语法更直观)
如果习惯用stringr处理字符串,可以这么写:
library(stringr) input_str <- "AC1(d12:20)-OH" output_str <- str_replace_all(input_str, "\\((.*?)\\)", function(match) { # 提取括号内的内容,移除数字和冒号后重新拼接括号 inner <- str_remove_all(str_sub(match, 2, -2), "[0-9:]") paste0("(", inner, ")") }) output_str # 输出结果:"AC1(d)-OH"
内容的提问来源于stack exchange,提问作者Mitch
相关产品推荐
相关产品推荐

