我想分割这个字符串: test = "-1x^2+3x^3-x^8+1-x" ...通过 R 中的加号和减号字符分成几部分。我的目标是得到: "-1x ^2" "+3x^3" "-x^8" "+1" "-x"
这不起作用:
strsplit(test, split = "-")
strsplit(test, split = "+")
Run Code Online (Sandbox Code Playgroud)
我们可以在 中提供一个正则表达式strsplit,我们使用?=向前查找来查找加号或减号,然后在该字符上进行拆分。这将允许角色本身被保留而不是在分割中被删除。
strsplit(x, "(?<=.)(?=[+])|(?<=.)(?=[-])",perl = TRUE)
# [1] "-1x^2" "+3x^3" "-x^8" "+1" "-x"
Run Code Online (Sandbox Code Playgroud)
尝试
> strsplit(test, split = "(?<=.)(?=[+-])", perl = TRUE)[[1]]
[1] "-1x^2" "+3x^3" "-x^8" "+1" "-x"
Run Code Online (Sandbox Code Playgroud)
其中(?<=.)(?=[+-])捕获恰好位于+or前面的分离器-。
这使用 gsub 搜索后跟 + 或 - 的任何字符,并在两个字符之间插入分号。然后它以分号分隔。
s <- "-1x^2+3x^3-x^8+1-x"
strsplit(gsub("(.)([+-])", "\\1;\\2", s), ";")[[1]]
## [1] "-1x^2" "+3x^3" "-x^8" "+1" "-x"
Run Code Online (Sandbox Code Playgroud)