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
相关产品推荐
相关产品推荐

