从字符串中删除转义符,或者“我怎样才能将\”移开?“

时间:2012-04-09 16:42:09

标签: string r escaping

逃避角色在R中造成很多麻烦,正如之前的问题所证明的那样:

  1. Change the values in a column
  2. Can R paste() output "\"?
  3. Replacing escaped double quotes by double quotes in R
  4. How to gsub('%', '\%', ... in R?
  5. 以前的许多问题都可以简化为“我怎样才能得到我的方式?”的特殊情况。

    有一种简单的方法吗?

    例如,我找不到gsub的参数,这些参数将从以下内容中删除所有转义:

     test <- c('\01', '\\001')
    

2 个答案:

答案 0 :(得分:8)

这里的难点在于"\1"虽然印有两个字形,但实际上,在R视图中是一个字符。事实上,它与"\001""\01"完全相同:

nchar("\1")
# [1] 1
nchar("\001")
# [1] 1
identical("\1", "\001")
# [1] TRUE

所以,你可以一般删除所有反斜杠:

(test <- c("\\hi\\", "\n", "\t", "\\1", "\1", "\01", "\001"))
# [1] "\\hi\\" "\n"     "\t"      "\\1"    "\001"   "\001"   "\001"  
eval(parse(text=gsub("\\", "", deparse(test), fixed=TRUE)))
# [1] "hi"  "n"   "t"   "1"   "001" "001" "001"

但是,正如您所看到的,"\1""\01"\001"都将呈现为001,(因为对于R来说,它们只是不同的名称"\001")。


编辑:有关在转义序列中使用"\"以及可以使用它们表示的各种字符的更多信息(包括Joshua Ulrich提到的不允许的字符串)在上面的评论中),请参阅R语言定义的this section

答案 1 :(得分:1)

我刚遇到同样的问题 - 如果你想要任何\ x,其中x是一个字符,那么我不知道如何,我希望我知道,但是要为特定的转义序列修复它。说\ n那么你可以做到

new = gsub("\n","",old,fixed=T)
在我的情况下,我只有\ n