代码之家  ›  专栏  ›  技术社区  ›  James White

提取第一个和最后一个之间的字符串_

  •  1
  • James White  · 技术社区  · 6 年前

    虽然我在stackoverflow中搜索了各种gsub答案,但我找不到适用于我所拥有数据的代码。我想创建一个新列,它提取第一个和最后一个下划线之间的所有字母。

    Test <- as.data.frame(c("A_YES_X","A_Yes_YES_X"))
    colnames(Test)[1] <- "test"
    

    所以在上面的例子中,这就是我需要的输出。

    Test$Output <- c("YES","Yes_YES")
    

    提前谢谢你

    3 回复  |  直到 6 年前
        1
  •  1
  •   markus    6 年前

    尝试

    x <- c("A_YES_X","A_Yes_YES_X")
    stringi::stri_extract(x, regex = '(?<=_).*(?=_)')
    #[1] "YES"     "Yes_YES"
    
        2
  •  5
  •   Lamia    6 年前

    你可以在第一次(包括第一次)使用之前找到字符串中的所有部分。 ^[^_]*_ 最后一次使用后的零件 _[^_]*$ . 您可以使用 gsub :

    gsub("_[^_]*$|^[^_]*_","",test,perl=T)
    [1] "YES"     "Yes_YES"
    
        3
  •  1
  •   emsinko    6 年前

    或者只提取捕获的模式“在第一个和最后一个字符之间有一个或多个字符(.+)(由@lamia很好地解释)。

    library(stringr)
    x <- c("A_YES_X","A_Yes_YES_X")
    str_match(x,"^[^_]*_(.+)_[^_]*$")[,2]