2017-02-15 144 views
0

假设我有一个具有以下特点GSUB功能r中删除斜杠

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

现在我想用GSUB功能r中删除“\和\”部分的字符串,只有请保留以下字符:

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

任何人都可以帮助我弄清楚该如何正确使用它?

+1

' “------------ 080209060700030309080805 \”'作为结果看起来像一个错字:做ÿ你真的希望最终的反斜杠成为你结果的一部分吗?请编辑您的答案... –

+0

请以纯文本向我们显示输入和输出应该是什么。不要担心在R中的转义 –

+0

这里的输入看起来是这样的: “\”------------ 080209060700030309080805 \“”,这实际上是来自垃圾邮件/来自数据科学书籍的火腿数据。我想使用gsub函数只抓住“------------ 080209060700030309080805”“部分,这意味着我想摆脱这里的斜线,但目前看来我没有一个很好的方法来做到这一点。 – tql66

回答

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

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

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:?"'"

字符常量

单引号和双引号分隔字符常量。它们可以互换使用 ,但首选双引号(而字符 常用双引号打印),因此单引号为 通常只用于分隔包含双引号的字符常量。

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

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

\ n换行\ r回车\ t制表\ b退格\一个警报(钟形) \ f换\ v垂直制表\反斜杠\ \ 'ASCII撇号' \ “ASCII引号”`ASCII严重口音(反向)`\ nnn
给定八进制代码(1,2或3位数)的字符\ xnn字符 给定十六进制代码(1或2个十六进制数字)\ unnnn Unicode字符 给定代码(1--4十六进制数字)\ Unnnnnnnn Unicode字符给出 代码(1--8个十六进制数字)