如何用R的stringr包提取下划线后至点号前的字符串?
用stringr提取指定区间的字符串内容
针对形如data_PB_Belf.csv、data_PB_NI.csv的字符串,要提取第一个下划线后、点号前的内容,推荐以下几种基于stringr包的正则方案:
方法1:使用str_extract + 正向后顾断言
直接匹配目标区间的内容,正则通过后顾断言限定开头,用非点号字符匹配到结尾:
library(stringr) test_strings <- c("data_PB_Belf.csv", "data_PB_NI.csv") extracted <- str_extract(test_strings, "(?<=_)[^.]+") # 输出结果 extracted # [1] "PB_Belf" "PB_NI"
正则说明:
(?<=_):正向后顾断言,确保匹配内容的前一个字符是下划线_(不会包含下划线本身)[^.]+:匹配一个或多个非点号的字符,自动停在第一个.前,刚好覆盖目标区间
方法2:使用str_match + 捕获组
通过捕获组精准提取目标部分,先匹配整个字符串的结构,再取出捕获的内容:
extracted <- str_match(test_strings, "^.*?_([^.]+)")[, 2]
正则说明:
^.*?_:匹配从字符串开头到第一个下划线的所有内容(.*?是非贪婪匹配,确保只匹配到第一个下划线)([^.]+):捕获组,匹配下划线后到点号前的所有非点号字符[, 2]:取出str_match返回矩阵的第二列,也就是捕获组的内容
方法3:使用str_replace替换无关内容
如果坚持用str_replace,可以通过替换掉前后不需要的部分来得到目标内容:
extracted <- str_replace(test_strings, "^.*?_|\\..*$", "")
正则说明:
^.*?_:匹配开头到第一个下划线的部分,准备替换为空|:逻辑或,同时匹配另一部分\\..*$:匹配点号及之后的所有内容,准备替换为空- 最终剩下的就是中间的目标内容
内容的提问来源于stack exchange,提问作者Larissa Cury
相关产品推荐
相关产品推荐

