我有一个类似的字符串:
nw.str <- "[D][A|D][T|A:D][C|T]"
我需要以这种方式拆分它:
"[D]" "[A|D]" "[T|A:D]" "[C|T]"
答案 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