【问题标题】:using gsub function in r to remove slash在 r 中使用 gsub 函数删除斜杠
【发布时间】:2017-02-15 06:51:36
【问题描述】:

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

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

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

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

谁能帮我弄清楚我应该如何正确地做到这一点?

【问题讨论】:

  • "------------080209060700030309080805\" 结果看起来像一个错字:您真的希望最后的反斜杠成为结果的一部分吗?请编辑您的答案...
  • 请用纯文本向我们展示输入和输出应该是什么。不用担心在 R 中转义。
  • 这里的输入就是这个样子:"\"------------080209060700030309080805\"",这实际上是来自一个垃圾邮件/火腿数据数据科学书籍。我想使用 gsub 函数只抓取“------------080209060700030309080805”部分,这意味着我想去掉这里的斜线,但目前似乎我没有这样做的好方法。

标签: r regex gsub string-substitution


【解决方案1】:

编辑 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 回车符 \t 制表符 \b 退格符 \a 警报(响铃) \f 换页符 \v 垂直制表符 \ 反斜杠 \ \' ASCII 撇号' \" ASCII 引号 " ` ASCII 重音符(反引号)` \nnn
具有给定八进制代码(1、2 或 3 位)的字符 \xnn 字符 使用给定的十六进制代码(1 或 2 个十六进制数字) \unnnn Unicode 字符 给定代码(1--4 十六进制数字) \Unnnnnnnn Unicode 字符与给定 代码(1--8 个十六进制数字)

【讨论】:

    【解决方案2】:
    string <- "\\------------080209060700030309080805\\"
    string <- gsub("^\\\\(.*)\\\\$", "\\1", string)
    

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

    【讨论】:

      猜你喜欢
      • 2015-02-14
      • 1970-01-01
      • 2020-07-11
      • 1970-01-01
      • 2019-03-31
      • 2012-08-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多