在R中用'[]'拆分字符串向量

时间:2014-06-08 20:24:45

标签: string r vector split

我有一个类似的字符串:

nw.str <- "[D][A|D][T|A:D][C|T]"

我需要以这种方式拆分它:

"[D]" "[A|D]" "[T|A:D]" "[C|T]"

5 个答案:

答案 0 :(得分:6)

您可以在base R中使用strsplit和零宽度断言(它们匹配字符,但不要使用它们)来执行此操作。基本上我们寻找紧密的括号,然后是开括号和开括号,然后是紧密的括号,并在它们之间分开....

strsplit( x , "(?<=\\])(?=\\[)"  , perl = TRUE )
#[[1]]
#[1] "[D]"     "[A|D]"   "[T|A:D]" "[C|T]"

答案 1 :(得分:4)

在这里,我使用stringr::str_replace_all在值之间插入空格。然后将该字符串拆分为空格。

> library(stringr)
> s <- str_replace_all(nw.str, fixed("]["), fixed("] ["))
> strsplit(s, " ")[[1]]  ## or unlist(strsplit(...))
# [1] "[D]"     "[A|D]"   "[T|A:D]" "[C|T]" 

使用基础R的另一种方式(有很多),

> g <- gsub("][", "] [", nw.str, fixed = TRUE)
> unlist(strsplit(g, " "))

答案 2 :(得分:3)

gsubfn package中的strapplyc我们指定要提取的内容(而不是我们要分割的内容)。

在这种情况下,我们想要提取一个左方括号"\\[",后跟任何".*?"(但是最短的东西,而不是问号所示的最长的),然后是右方形的brakcet { {1}}。

"\\]"

,并提供:

library(gsubfn)

strapplyc(nw.str, "\\[.*?\\]")[[1]]

答案 3 :(得分:1)

qdap方法:

library(qdap)
bracketXtract(nw.str, with=TRUE)

##      all1      all2      all3      all4 
##     "[D]"   "[A|D]" "[T|A:D]"   "[C|T]"

答案 4 :(得分:0)

以下是使用strsplit的方法:

splitted <- strsplit(nw.str,"][", fixed=TRUE)[[1]]
splitted[[1]] <- paste(splitted[[1]], "]", sep="")
splitted[2:length(splitted)-1] <- paste("[", splitted[2:length(splitted)-1], "]", sep="")
splitted[[length(splitted)]] <- paste("[", splitted[[length(splitted)]], sep="")
splitted