【问题标题】:R: Split a string and keep delimiterR:拆分字符串并保留分隔符
【发布时间】:2022-11-03 00:45:26
【问题描述】:

假设我有一个字符串:

StringA/StringB/StringC

有什么办法可以用/ 符号分割这个字符串,但把它保留在返回值中:

StringA
/StringB
/StringC

【问题讨论】:

    标签: r stringr


    【解决方案1】:

    是的,向前看:(?=/)

    library(stringr)
    str_split(str, "(?=/)")
    
    #[[1]]
    #[1] "StringA"  "/StringB" "/StringC"
    

    tidyr 分离功能同样有效:

    tidyr::separate_rows(data.frame(str), str, sep = "(?=/)")
    
    #  str        
    #1 StringA 
    #2 /StringB
    #3 /StringC
    

    使用基本 R 的 strsplit,前瞻是 less straightforwards,但这很好用:

    unlist(strsplit(str, "(?<=.)(?=[/])", perl = TRUE))
    #[1] "StringA"  "/StringB" "/StringC"
    

    反过来:

    unlist(strsplit(str, "(?<=/)", perl = TRUE))
    #[1] "StringA/" "StringB/" "StringC" 
    

    【讨论】:

    • 谢谢!同样,如果我希望它以 / 结尾,它将如何工作?
    • 回顾一下:str_split(str, "(?&lt;=/)")
    【解决方案2】:

    您可以尝试scan + gsub 如下所示

    > scan(text = gsub("/", " /", "StringA/StringB/StringC"), what = "")
    Read 3 items
    [1] "StringA"  "/StringB" "/StringC"
    

    【讨论】:

      【解决方案3】:

      str_extract

      library(stringr)
      str_extract_all(str1, "/?[^/]+")[[1]]
      [1] "StringA"  "/StringB" "/StringC"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-26
        • 1970-01-01
        • 1970-01-01
        • 2018-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多