【问题标题】:Split character string by forward slash or nothing用正斜杠或什么都不分割字符串
【发布时间】:2018-06-01 16:14:31
【问题描述】:

我想分割这个向量

c("CC", "C/C")

[[1]]
[1] "C" "C"

[[2]]
[1] "C" "C"

我的最终数据应该是这样的:

c("C_C", "C_C")

因此,我需要一些regex,但不知道如何解决“非空格”部分:

strsplit(c("CC", "C/C"),"|/")

【问题讨论】:

    标签: r regex split


    【解决方案1】:

    您可以使用sub(或gsub,如果它在您的字符串中出现多次)直接替换任何内容或用下划线替换正斜杠(捕获一个字符的单词):

    sub("(\\w)(|/)(\\w)", "\\1_\\3", c("CC", "C/C"))
    #[1] "C_C" "C_C"
    

    【讨论】:

      【解决方案2】:

      我们可以在每个字符处拆分字符串,将“/”和paste 一起省略。

      sapply(strsplit(x, ""), function(v) paste0(v[v!= "/"], collapse = "_"))
      
      #[1] "C_C" "C_C"
      

      数据

      x <- c("CC", "C/C")
      

      【讨论】:

        【解决方案3】:

        我们可以使用

        lapply(strsplit(v1, "/|"), function(x) x[nzchar(x)])
        

        或使用正则表达式环视

        strsplit(v1, "(?<=[^/])(/|)", perl = TRUE)
        #[[1]]
        #[1] "C" "C"
        
        #[[2]]
        #[1] "C" "C"
        

        如果最终输出应该是一个向量,那么

        gsub("(?<=[^/])(/|)(?=[^/])", "_", v1, perl = TRUE)
        #[1] "C_C" "C_C"
        

        【讨论】:

          猜你喜欢
          • 2016-02-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多