正则表达式求助:提取字符串右侧第2与第3个下划线之间的内容
解决方案
你需要的是从字符串末尾倒推匹配目标段,不需要依赖双下划线特征,以下是R语言的两种实现方式:
1. stringr包实现(写法更直观)
library(stringr) string <- "Junk1_Junk2_Junk3__ID1_Junk4_Junk5.pdf" # 正则逻辑:匹配非下划线字符段,且该段右侧恰好有2个下划线分隔的片段直到字符串末尾 target <- str_extract(string, "[^_]+(?=(_[^_]+){2}$)")
运行后target的值就是ID1,适配所有符合「右侧第2、3个下划线之间取内容」规则的字符串,不需要存在双下划线。
2. 基础R实现(无需加载额外包)
string <- "Junk1_Junk2_Junk3__ID1_Junk4_Junk5.pdf" target <- sub(".*_([^_]+)(_[^_]+){2}$", "\\1", string)
正则学习测试资源推荐
- 实时测试工具:常用代码编辑器(VS Code、Sublime Text、Notepad++等)的搜索功能都支持正则模式,写正则时可以直接在编辑器内实时调试匹配效果。
- 入门学习资料:《正则表达式必知必会》,内容轻量化,覆盖日常80%以上的正则使用场景,适合新手快速上手。
- 进阶学习资料:《精通正则表达式》,系统讲解正则匹配原理、不同语言的正则引擎差异,适合需要深度掌握正则的场景。
内容的提问来源于stack exchange,提问作者jack kelly
相关产品推荐
相关产品推荐

