在R语言中如何提取22k_与_res之间的子字符串
R 提取字符串指定区间内容方案
示例数据
你提供的测试向量如下:
a <- c("yhj-22k_loki_res", "jh_22k_lok_res", "fgdjh_22k_lk_res", "jhkkl_kkff_22k_lo_res", "j_22k_mm_res", "ko-jh_22k_lm_res")
方法1:使用stringr包(tidyverse生态,推荐)
利用正则的前后预查直接匹配目标区间,语法简洁:
# 加载包 library(stringr) # 提取向量结果 result <- str_extract(a, "(?<=22k_).*?(?=_res)") # 如果是处理数据框列,假设数据框为df,待处理列名为str_col # df <- df %>% # mutate(target = str_extract(str_col, "(?<=22k_).*?(?=_res)"))
运行后result的输出为:"loki" "lok" "lk" "lo" "mm" "lm",完全符合预期。
方法2:Base R 原生方法(无需安装额外包)
用原生的regmatches和regexpr函数实现,适合不想依赖第三方包的场景:
pattern <- "(?<=22k_).*?(?=_res)" result <- regmatches(a, regexpr(pattern, a, perl = TRUE))
正则规则说明
用到的正则片段含义:
(?<=22k_):反向预查,要求匹配位置的前序内容是22k_,且不会把22k_计入提取结果.*?:非贪婪匹配任意字符,保证匹配到第一个_res就停止,避免多匹配(?=_res):正向预查,要求匹配位置的后序内容是_res,且不会把_res计入提取结果
内容的提问来源于stack exchange,提问作者bic ton
相关产品推荐
相关产品推荐

