R语言中使用gsub替换"+"出现异常的原因及正确实现方式
R语言中使用gsub替换"+"出现异常的原因及正确实现方式
嗨,这个问题我之前也踩过坑!其实问题出在正则表达式的特殊字符上,咱们一步步来理清楚:
为什么会出现奇怪的替换结果?
gsub()函数默认是按照正则表达式模式来匹配字符串的,而"+"在正则里是个元字符,它的含义是「匹配前面的元素一次或多次」,不是你想替换的那个普通加号。
当你直接写gsub("+", ">", df$a)时,gsub会把"+"当成正则规则:它会匹配任意单个字符(因为前面没有指定具体元素,默认匹配任意),然后给每个匹配到的字符前后都加上>,就出现了你看到的>A>B>+>C>D>+>E>F>这种奇怪结果。
正确的实现方式
有两种简单的方法可以解决这个问题:
方法1:转义加号(正则方式)
把加号转义成字面量字符,在R里需要用双反斜杠\\+来表示(因为单个反斜杠是R字符串的转义符,所以要写两个才能传到正则引擎里):
df$y <- gsub("\\+", ">", df$a)
方法2:使用fixed参数(非正则方式)
告诉gsub()不要用正则匹配,而是按固定字符串来查找,直接设置fixed=TRUE参数:
df$y <- gsub("+", ">", df$a, fixed = TRUE)
验证结果
运行上面任意一种方法后,你的df就会得到期望的输出:
df #> a x y #> 1 AB+CD+EF 1 AB>CD>EF #> 2 GH+IJ+KL 2 GH>IJ>KL
备注:内容来源于stack exchange,提问作者Nao
相关产品推荐
相关产品推荐

