R语言中提取第二个下划线与句号之间的文本
提取第二个下划线与点之间文本的修改方案
你的原代码里,(?<=_)(.+)(?=\.)中的.+是贪婪匹配,会从第一个下划线开始把后面所有到点前的内容都捞出来,所以得到了two_three。要拿到第二个下划线和点之间的three,可以用下面两种修改方式,都基于str_extract:
library(stringr) mytext <- "one_two_three.four" # 方式1:精准定位第二个下划线 result <- str_extract(mytext, "(?<=_[^_]_)[^.]+") print(result) # 输出 "three" # 方式2:直接匹配最后一段非下划线、到点前的内容(更简洁) result <- str_extract(mytext, "[^_]+(?=\\.)") print(result) # 输出 "three"
简单说明
- 方式1里的
(?<=_[^_]_)是正向后行断言,确保匹配位置前面是「下划线+非下划线字符+下划线」,也就是精准卡在第二个下划线之后;[^.]+只匹配到点号前的非点字符,不会多拿多余内容。 - 方式2更直接,
[^_]+(?=\.)匹配「后面跟着点号的连续非下划线字符」,正好对应最后一个下划线到点之间的three。
内容的提问来源于stack exchange,提问作者Basil
相关产品推荐
相关产品推荐

