【发布时间】: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"),"|/")
【问题讨论】:
我想分割这个向量
c("CC", "C/C")
到
[[1]]
[1] "C" "C"
[[2]]
[1] "C" "C"
我的最终数据应该是这样的:
c("C_C", "C_C")
因此,我需要一些regex,但不知道如何解决“非空格”部分:
strsplit(c("CC", "C/C"),"|/")
【问题讨论】:
您可以使用sub(或gsub,如果它在您的字符串中出现多次)直接替换任何内容或用下划线替换正斜杠(捕获一个字符的单词):
sub("(\\w)(|/)(\\w)", "\\1_\\3", c("CC", "C/C"))
#[1] "C_C" "C_C"
【讨论】:
我们可以在每个字符处拆分字符串,将“/”和paste 一起省略。
sapply(strsplit(x, ""), function(v) paste0(v[v!= "/"], collapse = "_"))
#[1] "C_C" "C_C"
数据
x <- c("CC", "C/C")
【讨论】:
我们可以使用
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"
【讨论】: