如何使用模式匹配从R字符串向量中提取指定目标值?
在R中提取字符串向量中的目标值
可以通过正则表达式结合字符串处理工具实现需求,以下是两种常用方法:
方法一:使用stringr包(推荐,语法更简洁)
# 先安装并加载stringr包(首次使用需安装) # install.packages("stringr") library(stringr) # 定义待处理的字符串向量 strings <- c('/ccr/1.10E+93_ccrdt/indices/1.10E+93_ccr_ann_123.csv', '/ccr/1.10E+93_ccrdt/indices/1.10E+93_obsrst_ann.csv', '/ccr/1012055_obsrt/indices/1012055_obsrrt.csv', '/ccr/1012055_obsrt/indices/1012055_ccr_ann.csv', '/ccr/1018598_obsrt/indices/1018598_obsrrt.csv', '/ccr/AOL_obsrt/indices/AOL_rrst.csv', '/ccr/WDF985_obsrt/indices/WDF985_rrst.csv') # 提取目标值 extracted_values <- str_extract(strings, "(?<=/ccr/)[^_]+") # 输出结果 print(extracted_values)
运行后会得到符合要求的结果:
[1] "1.10E+93" "1.10E+93" "1012055" "1012055" "1018598" "AOL" "WDF985"
方法二:使用基础R函数
无需额外安装包,直接用regmatches和regexpr实现:
# 定义字符串向量 strings <- c('/ccr/1.10E+93_ccrdt/indices/1.10E+93_ccr_ann_123.csv', '/ccr/1.10E+93_ccrdt/indices/1.10E+93_obsrst_ann.csv', '/ccr/1012055_obsrt/indices/1012055_obsrrt.csv', '/ccr/1012055_obsrt/indices/1012055_ccr_ann.csv', '/ccr/1018598_obsrt/indices/1018598_obsrrt.csv', '/ccr/AOL_obsrt/indices/AOL_rrst.csv', '/ccr/WDF985_obsrt/indices/WDF985_rrst.csv') # 提取目标值 extracted_values_base <- regmatches(strings, regexpr("(?<=/ccr/)[^_]+", strings, perl = TRUE)) # 输出结果 print(extracted_values_base)
正则表达式说明
(?<=/ccr/)[^_]+的含义:
(?<=/ccr/):正向零宽断言,确保匹配内容的前缀是/ccr/[^_]+:匹配任意数量的非下划线字符,直到遇到第一个下划线为止,正好抓取我们需要的目标标识
内容的提问来源于stack exchange,提问作者Lily Nature
相关产品推荐
相关产品推荐

