假设我有一个包含以下字符的字符串
"\"------------080209060700030309080805\""
现在我想在r中使用gsub函数删除" \和\"部分,只保留以下字符:
"------------080209060700030309080805\"
有谁可以帮我弄清楚我该怎么做呢?
答案 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,第二次是正则表达式引擎。