将字符串分隔为r中的列表

时间:2016-08-23 00:29:59

标签: r string list parsing character

我在R中有一个字符串,如下所示:

"{[PP]}{[BGH]}{[AC]}{[ETL]}....{[D]}"

我想将其转换为列表,以便:

List[[1]] = {[PP]}
List[[2]] = {[BGH]}
....
List[[N]] = {[D]}

如果有逗号你可以做strsplit,但我想保留括号而不是摆脱它们。不知道如何在R

中做到这一点

4 个答案:

答案 0 :(得分:3)

没有正则表达式:

s <- "{[PP]}{[BGH]}{[AC]}{[ETL]}{[D]}"
as.list(paste("{", strsplit(s, "\\{")[[1]][-1], sep = ""))
[[1]]
[1] "{[PP]}"

[[2]]
[1] "{[BGH]}"

[[3]]
[1] "{[AC]}"

[[4]]
[1] "{[ETL]}"

[[5]]
[1] "{[D]}"

答案 1 :(得分:2)

strsplit如果你传递这个约束要分割的位置的正则表达式(?<=})(?={)仍然有效:

strsplit(s, "(?<=})(?={)", perl = T)

# [[1]]
# [1] "{[PP]}"  "{[BGH]}" "{[AC]}"  "{[ETL]}" "{[D]}" 

或者@thelatemail建议:

strsplit(s, "(?<=})", perl = T)

答案 2 :(得分:0)

强制性stringi回答:

library(stringi)

dat <- "{[PP]}{[BGH]}{[AC]}{[ETL]}{[more]{[D]}"
as.list(stri_match_all_regex(dat, "(\\{\\[[[:alpha:]]+\\]\\})")[[1]][,2])
## [[1]]
## [1] "{[PP]}"
## 
## [[2]]
## [1] "{[BGH]}"
## 
## [[3]]
## [1] "{[AC]}"
## 
## [[4]]
## [1] "{[ETL]}"
## 
## [[5]]
## [1] "{[D]}"

答案 3 :(得分:0)

qdap中有一个方便的功能,即bracketXtract

library(qdap)
setNames(as.list(bracketXtract(s, "curly", TRUE)), NULL)
#[[1]]
#[1] "{[PP]}"

#[[2]]
#[1] "{[BGH]}"

#[[3]]
#[1] "{[AC]}"

#[[4]]
#[1] "{[ETL]}"

#[[5]]
#[1] "{[D]}"

默认情况下,with = FALSE。因此,如果不使用with = TRUE,它将删除括号。

数据

s <- "{[PP]}{[BGH]}{[AC]}{[ETL]}{[D]}"