我希望你能帮我翻译一些与IT技术有关的内容。要翻译的内容是如何拆分一个通用格式的字符串,其中方括号表示字符串的“部分”。例如:
x <- "[a] + [bc] + 1"
并返回一个类似于字符向量的结果:
"[a]" " + " "[bc]" " + 1"
更新:最终使用以下方法:
x <- "[a] + [bc] + 1"
x <- gsub("\\[",",[",x)
x <- gsub("\\]","],",x)
strsplit(x,",")
我希望你能帮我翻译一些与IT技术有关的内容。要翻译的内容是如何拆分一个通用格式的字符串,其中方括号表示字符串的“部分”。例如:
x <- "[a] + [bc] + 1"
"[a]" " + " "[bc]" " + 1"
更新:最终使用以下方法:
x <- "[a] + [bc] + 1"
x <- gsub("\\[",",[",x)
x <- gsub("\\]","],",x)
strsplit(x,",")
strsplit
函数,但是那个函数总是会删除分隔符。也许可以通过改动,制作一个新的 newstrsplit
函数,它可以在分隔符处进行分割,并保留它们。可能需要略过第一个或最后一个位置,并区分开头和结尾的分隔符。scan(text= # use scan to separate after insertion of commas
gsub("\\]", "],", # put commas in after "]"'s
gsub(".\\[", ",[", x)) , # add commas before "[" unless at first position
what="", sep=",") # tell scan this character argument and separators are ","
#Read 4 items
#[1] "[a]" " +" "[bc]" " + 1"
strplit
。 - Jeff KellerFUN <- function(x) {
all <- unlist(strsplit(x, "\\s+"))
last <- paste(c(" ", tail(all, 2)), collapse="")
c(head(all, -2), last)
}
x <- "[a] + [bc] + 1"
FUN(x)
## > FUN(x)
## [1] "[a]" "+" "[bc]" " +1"
substring
:split.pos <- gregexpr('\\[.*?]',x)[[1]]
split.length <- attr(split.pos, "match.length")
split.start <- sort(c(split.pos, split.pos+split.length))
split.end <- c(split.start[-1]-1, nchar(x))
substring(x,split.start,split.end)
# [1] "[a]" " + " "[bc]" " + 1"
gregexpr
会很有用。我很惊讶你在模式中没有使用“\]”。 - IRTFM]
不需要转义,因为它不会被解释为字符类的结束,这是因为 [
已经被解释了。嗯,不确定我表达得是否清楚 :-) - juba以下是使用正向和反向预查,按括号分割并将其保留在结果中的版本:
splitme <- function(x) {
x <- unlist(strsplit(x, "(?=\\[)", perl=TRUE))
x <- unlist(strsplit(x, "(?<=\\])", perl=TRUE))
for (i in which(x=="[")) {
x[i+1] <- paste(x[i], x[i+1], sep="")
}
x[-which(x=="[")]
}
splitme(x)
#[1] "[a]" " + " "[bc]" " + 1"