【问题标题】:R use str_extract (stringr) to export a string between "_"R 使用 str_extract(stringr) 导出“_”之间的字符串
【发布时间】:2017-10-10 10:57:20
【问题描述】:

我在向量中有一些字符串,例如:

x <- c("ROH_Pete_NA_1_2017.zip",
   "ROH_Annette_SA_2_2016.zip",
   "ROH_Steve_MF_4_2015.zip")

我需要从strings (Pete, Annette, Steve) 中提取名称 我想这样做,循环使用str_extract()

所有字符串都以ROH_开头,但名称长度不同,后面的字符串也不同。

我想使用str_extract(),但我也很乐意使用其他解决方案

感谢您的帮助。

【问题讨论】:

    标签: r extract stringr


    【解决方案1】:

    str_match 可能会更好,因为这允许捕获组。 因此,您可以在任一侧添加_ 作为上下文,但只返回您感兴趣的位。(\\w+?) 是捕获组,str_match 将其作为第二列返回,因此[,2](第一个列是 str_extract 将返回的内容)。

    library(stringr)
    str_match(x,"ROH_(\\w+?)_")[,2]
    
    [1] "Pete"    "Annette" "Steve" 
    

    【讨论】:

      【解决方案2】:

      这里有一个解决方案 str_extract

      library(stringr)
      str_extract(x, "(?<=_).+?(?=_)")
      # [1] "Pete"    "Annette" "Steve"  
      

      您也可以在基础 R 中使用 gsub

      gsub("^.+?_|_.+$", "", x)
      # [1] "Pete"    "Annette" "Steve"  
      

      【讨论】:

      • 对于查看此处的其他人,str_extract 解决方案使用正向后视和正向前瞻。阅读更多here
      【解决方案3】:

      试试stringi 包:

      library(stringi)
      stri_split_fixed(a,"_", simplify = T)[,2]
      [1] "Pete"    "Annette" "Steve"  
      

      【讨论】:

        【解决方案4】:

        你可以使用基函数sub。

        sub("ROH_([[:alpha:]]+)_.*","\\1",x,perl=T)
        
        [1] "Pete"    "Annette" "Steve"  
        

        【讨论】:

          猜你喜欢
          • 2022-01-18
          • 2022-11-13
          • 1970-01-01
          • 2017-03-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-26
          • 1970-01-01
          相关资源
          最近更新 更多