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

R语言如何提取字符串中匹配项到下一个下划线前的子串?

R语言指定特征匹配后提取到下一个下划线前内容的实现方案

需求为:字符串匹配到指定特征时,提取从匹配位置开始到下一个下划线_前的所有内容,示例提取规则如下:

  • 输入mycampaign_s22uhd4k_otherinfo,输出s22uhd4k
  • 输入my_campaign_otherinfo_s22jumpto_otherinfo,输出s22jumpto

测试数据集:

df <- structure(list(a = c("mycampaign_s22uhd4k_otherinfo", "my_campaign_otherinfo_s22jumpto_otherinfo"
), b = c(1, 2)), class = "data.frame", row.names = c(NA, -2L))

实现方法

核心逻辑为正则匹配:先定位指定的特征字符串,向后连续匹配所有非下划线字符,直到遇到第一个下划线自动终止,即可得到目标提取结果。

方法1:stringr包实现(推荐,代码简洁易读)

# 加载包,未安装可先运行 install.packages("stringr")
library(stringr)

# 提取内容,将正则中的s22替换为你实际需要匹配的指定特征即可
df$extract_result <- str_extract(df$a, "s22[^_]+")

运行后查看结果:

> df$extract_result
[1] "s22uhd4k"  "s22jumpto"

完全符合示例预期。

方法2:基础R实现(无需安装第三方包)

如果不想依赖额外包,可以直接用R内置的正则处理函数实现:

# 同样替换正则开头的s22为你的目标匹配特征即可
df$extract_result <- regmatches(df$a, regexpr("s22[^_]+", df$a))

运行结果和上述方法完全一致。

正则说明:[^_]+代表匹配1个及以上连续的、非下划线的任意字符,固定实现「匹配到下一个下划线前停止」的规则,不需要调整。如果需要匹配的指定特征包含特殊正则字符(比如.、*等),可以用fixed()参数包裹特征字符串做精确匹配,避免正则转义问题。


内容的提问来源于stack exchange,提问作者Omar Gonzales

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 17:54:30