在r中使用gsub函数删除斜杠

时间:2017-02-15 06:51:37

标签: r regex gsub string-substitution

假设我有一个包含以下字符的字符串

"\"------------080209060700030309080805\""

现在我想在r中使用gsub函数删除" \和\"部分,只保留以下字符:

"------------080209060700030309080805\"

有谁可以帮我弄清楚我该怎么做呢?

2 个答案:

答案 0 :(得分:4)

编辑1:修正了错误(在字符串中创建反斜杠需要两个反斜杠):

s <- '\\"------------080209060700030309080805\\"'
s
gsub('\\"', "", s, fixed = TRUE)

结果

> s <- '\\"------------080209060700030309080805\\"'
> s
[1] "\\\"------------080209060700030309080805\\\""
> gsub('\\"', "", s, fixed = TRUE)
[1] "------------080209060700030309080805"

请注意,R中的单个反斜杠是转义码,它不属于字符串:

> charToRaw('\\"')
[1] 5c 22
> charToRaw('\"')
[1] 22

因此,您必须在引用的字符串中使用两个反斜杠在内部创建一个反斜杠。如果你打印这个字符串,反斜杠会再次转义,这看起来很混乱:

> print('\\"')
[1] "\\\""

如果您要打印字符串的未转义内容,请使用cat代替print

> cat('\\"')
\"

有关更多信息,请参阅R中的帮助:?"'"

  

字符常量

     

单引号和双引号分隔字符常量。它们可以使用   可互换,但双引号是首选(和字符   常量使用双引号打印,所以单引号是   通常仅用于分隔包含double的字符常量   引号。

     

反斜杠用于在字符内部启动转义序列   常量。转义不在下表中的字符是一个   错误。

     

单引号需要通过单引号中的反斜杠进行转义   双引号字符串中的字符串和双引号。

     

\ n换行符\ r \ n回车\ t \ tab \ b \ backspace \ a alert(bell)   \ f form feed \ v vertical tab \ backslash \ \''ASCII撇号'   \“ASCII引号”`ASCII严重重音(反引号)`\ nnn
  具有给定八进制代码(1,2或3位)\ xnn字符的字符   给定的十六进制代码(1或2个十六进制数字)\ unnnn Unicode字符   给定代码(1--4十六进制数字)\ Unnnnnnn Unicode字符给定   代码(1--8位十六进制数字)

答案 1 :(得分:1)

string <- "\\------------080209060700030309080805\\"
string <- gsub("^\\\\(.*)\\\\$", "\\1", string)

注意:我使用的模式是^\(.*)\$,它将匹配开始和结束反斜杠之间的所有内容。这只会匹配字符串,因此字符串以反斜杠开头和结尾。此外,我们使用四个反斜杠(\\\\)来表示gsub()中模式的文字反斜杠。我们需要逃避两次,一次是R,第二次是正则表达式引擎。