String 使用'拆分字符串向量;[]和#x27;在R

String 使用'拆分字符串向量;[]和#x27;在R,string,r,vector,split,String,R,Vector,Split,我有一个类似这样的字符串: nw.str <- "[D][A|D][T|A:D][C|T]" 这里我使用stringr::str\u replace\u all在值之间插入一个空格。然后在空格处分开那根线 > library(stringr) > s <- str_replace_all(nw.str, fixed("]["), fixed("] [")) > strsplit(s, " ")[[1]] ## or unlist(strsplit(...)) #

我有一个类似这样的字符串:

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

这里我使用
stringr::str\u replace\u 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]" 
>库(stringr)
>s strsplit(s,“”[[1]]###或unlist(strsplit(…))
#[1]“[D]”“[A | D]”“[T | A:D]”“[C | T]”
另一种使用基数R的方法(有很多)

>g未列出(strsplit(g,“”)

以下是一种使用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

splitted您可以在
base
R中使用
strsplit
和零宽度断言(它们匹配字符,但不使用字符)。基本上,我们寻找紧跟在开括号之后的开括号,以及紧跟在开括号之前的开括号,并在它们之间拆分

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

strsplit(x,”(?与中的
Straplyc
一起,我们指定了要提取的内容(而不是要分割的内容)

在这种情况下,我们希望提取一个左方括号
“\\[”
,后跟任何东西
“*?”
(但最短的东西,而不是问号所示的最长的东西),然后是一个右方括号
“\\]”

给予:

[1] "[D]"     "[A|D]"   "[T|A:D]" "[C|T]"  
qdap方法:

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

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

交叉发布到R-help被认为是一种不好的形式,因此。
gsubfn
看起来是一个非常有用的包。谢谢你介绍我。
library(gsubfn)

strapplyc(nw.str, "\\[.*?\\]")[[1]]
[1] "[D]"     "[A|D]"   "[T|A:D]" "[C|T]"  
library(qdap)
bracketXtract(nw.str, with=TRUE)

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