代码之家  ›  专栏  ›  技术社区  ›  Roman

按正斜杠或不按任何方式拆分字符串

  •  7
  • Roman  · 技术社区  · 8 年前

    我想拆分这个向量

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

    到

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

    我的最终数据应该如下所示:

    c("C_C", "C_C")
    

    因此,我需要一些 regex ,但未找到如何解决“非空间”部分:

    strsplit(c("CC", "C/C"),"|/")
    
    3 回复  |  直到 8 年前
        1
  •  9
  •   Cath    8 年前

    您可以使用 sub (或 gsub 如果在字符串中多次出现,则直接用下划线替换无或正斜杠(捕获周围的一个字符):

    sub("(\\w)(|/)(\\w)", "\\1_\\3", c("CC", "C/C"))
    #[1] "C_C" "C_C"
    
        2
  •  5
  •   Ronak Shah    8 年前

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

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

    数据

    x <- c("CC", "C/C")
    
        3
  •  5
  •   akrun    8 年前

    我们可以使用

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

    或者使用regex lookaround

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

    如果最终输出应为向量,则

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