我在R中有一个字符串,如下所示:
"{[PP]}{[BGH]}{[AC]}{[ETL]}....{[D]}"
我想将其转换为列表,以便:
List[[1]] = {[PP]}
List[[2]] = {[BGH]}
....
List[[N]] = {[D]}
如果有逗号你可以做strsplit,但我想保留括号而不是摆脱它们。不知道如何在R
中做到这一点答案 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]}"