R语言如何提取字符串中首个Comments:前的目标内容
R语言提取首个"Comments :"标记前的目标内容
实现逻辑
定位字符串中第一次出现Comments :的位置,截取该位置之前的文本片段,清理掉前缀冗余的字段名和首尾空格即可,后续出现的所有Comments :及附属内容会被自动丢弃。
方法1:基础R实现(无需安装第三方包)
直接调用R内置的字符串匹配、截取函数完成处理,适合不想额外装包的场景:
# 测试示例1 asd <- "Model : test modelComments : Comments are useful. Comments :" # 定位第一个Comments :的起始索引 pos <- regexpr("Comments :", asd)[1] # 截取片段并清理前缀、多余空格 res <- trimws(substr(asd, nchar("Model : ") + 1, pos - 1)) res # [1] "test model" # 测试示例2 asd1 <- "Model : Example2Comments : Useful. Comments :" pos1 <- regexpr("Comments :", asd1)[1] res1 <- trimws(substr(asd1, nchar("Model : ") + 1, pos1 - 1)) res1 # [1] "Example2"
方法2:stringr包实现(代码更简洁)
如果日常使用tidyverse生态做数据处理,可以用stringr的封装函数简化写法:
library(stringr) # 测试示例1 asd <- "Model : test modelComments : Comments are useful. Comments :" res <- trimws(str_remove(str_split_fixed(asd, "Comments :", n = 2)[,1], "^Model : ")) res # [1] "test model" # 测试示例2 asd1 <- "Model : Example2Comments : Useful. Comments :" res1 <- trimws(str_remove(str_split_fixed(asd1, "Comments :", n = 2)[,1], "^Model : ")) res1 # [1] "Example2"
提示:如果待处理文本的前缀不是固定的
Model :,只需要调整前缀匹配的规则即可,比如将^Model :替换为^.*?:,即可自动匹配任意冒号结尾的字段前缀。
内容的提问来源于stack exchange,提问作者manu p
相关产品推荐
相关产品推荐

