You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 10:55:29