R语言中提取字符串指定中间内容的更优单行实现方案求助
R语言提取目标字符串片段的简洁单行方案
这里提供几种比嵌套gsub更简洁的单行实现方式:
方法1:使用stringr包的str_extract(推荐)
借助正则正向预查精准匹配目标片段,代码更直观:
library(stringr) string <- "foo_bar_doo_xwanted1part_more_junk" str_extract(string, "(?<=_x)[^_]+") #> [1] "wanted1part"
说明:(?<=_x)表示匹配_x之后的内容,[^_]+匹配到下一个下划线前的所有字符,刚好命中目标片段。
方法2:Base R的sub函数一次完成
利用正则捕获组,一次替换直接提取目标内容,无需嵌套调用:
string <- "foo_bar_doo_xwanted1part_more_junk" sub(".*?_x([^_]+)_.*", "\\1", string) #> [1] "wanted1part"
说明:([^_]+)捕获_x后到下一个_前的内容,\\1表示引用这个捕获组,替换整个字符串为捕获的内容。
方法3:分割字符串后提取(依赖位置,灵活性稍差)
如果不想用正则,也可以通过分割字符串后提取对应部分:
string <- "foo_bar_doo_xwanted1part_more_junk" sub("^x", "", strsplit(string, "_")[[1]][4]) #> [1] "wanted1part"
说明:先按_分割字符串,取第4个元素后去掉开头的x,但这种方法依赖目标片段的固定位置,不如正则灵活。
内容的提问来源于stack exchange,提问作者boshek
相关产品推荐
相关产品推荐

