通过正斜杠或什么都不拆分字符串

时间:2017-12-19 09:06:53

标签: r regex split

我想分割这个载体

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

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

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

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

c("C_C", "C_C")

因此,我需要一些regex,但是没有找到如何解决非空间"部分:

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

3 个答案:

答案 0 :(得分:8)

您可以使用sub(或gsub如果它在字符串中出现多次)直接替换任何内容或带正弦的正斜杠(捕获一个字符周围):

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

答案 1 :(得分:5)

我们可以使用

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"

答案 2 :(得分:5)

我们可以在每个字符处拆分字符串,省略&#34; /&#34;和paste他们在一起。

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

#[1] "C_C" "C_C"

数据

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