You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言如何按加号减号拆分字符串并保留各段符号前缀

R语言按加减号拆分多项式字符串实现

问题描述

待处理字符串定义:
test = "-1x^2+3x^3-x^8+1-x"
拆分规则:以加号、减号作为项的分隔标识,拆分后保留每个项自带的正负符号,预期输出结果为:"-1x^2" "+3x^3" "-x^8" "+1" "-x"
原有尝试代码未达到预期效果,代码如下:

strsplit(test, split = "-")
strsplit(test, split = "+")

原有代码问题说明

  • strsplit()的split参数默认按正则表达式规则解析,+是正则中的特殊量词字符,直接传入split = "+"会触发正则语法错误,无法正常执行
  • 即便对特殊字符转义后直接按+/-做分隔,也会把加减号本身作为分隔符剔除,最终拆分结果会丢失每个项的正负号,且字符串开头的负号会导致拆出多余的空字符串,无法得到目标结果

正确实现代码

使用正则的零宽正向先行断言匹配分隔位置,不会消耗分隔用的加减号本身,拆分后过滤掉开头产生的空字符串即可:

test <- "-1x^2+3x^3-x^8+1-x"
# 开启perl正则支持,用前瞻断言匹配所有后面紧跟+/-的位置作为分隔点
split_res <- strsplit(test, split = "(?=[+-])", perl = TRUE)[[1]]
# 过滤拆分产生的空字符串
final_res <- split_res[split_res != ""]

运行后final_res的输出完全符合预期:

[1] "-1x^2" "+3x^3" "-x^8"  "+1"     "-x"

内容的提问来源于stack exchange,提问作者dlwhch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 10:15:38