【问题标题】:How can I get rid of one backslash in a string in R?如何摆脱 R 中字符串中的一个反斜杠?
【发布时间】:2020-08-18 09:40:54
【问题描述】:

如何从该字符串中删除所有反斜杠?

t1 <- "1\2\3\4\5"

输出:

"1\002\003\004\005"

想要的输出:

"1002003004005"

谢谢!

【问题讨论】:

  • 那些不是反斜杠,那些是 unicode 字母。
  • @Pascal 您可以使用writeLines(t1) 进行验证。无法将输出作为 unicode 共享给您。自己试试吧。
  • 真的,从输入中获取输出在某些层面上并不容易或不可取。您也许可以从sub("^[^]]*\\]\\s*", "", capture.output(charToRaw(t1))) 开始,它产生"31 02 03 04 05",但由于31(这是"1" 字符的原始位编码),这显然是有缺陷的。转换空格等字符串很容易,但是......对我来说,如果你想要来自"1\2""1002",这听起来可能对这些数据有错误的假设。

标签: r regex string character


【解决方案1】:

这很棘手,因为"1\002\003\004\005" 并不是一个真正有效的字符串开头。看到这个:

> writeLines(t1)
1

不过,我们可以先deparse它来创建有效的字符串。

t2 <- deparse(t1)
> t2
[1] "\"1\\002\\003\\004\\005\""

然后使用常规的gsub 删除我们作为副作用添加的\ 和引号。

t3 = gsub('\\', '', t2, fixed = TRUE)
t3 = gsub('\"', '', t3)

更理想的是,我们会编写一个复合正则表达式。

t3 = gsub('[(\")(\\)]', '', t2)
> t3
[1] "1002003004005"

编辑:作为单行者:

gsub('[(\")(\\)]', '', deparse(t1))

您可以参考下面的链接以获取有关使用 gsub 进行模式映射的更多详细信息:

How do I deal with special characters like \^$.?*|+()[{ in my regex?

https://rstudio.com/wp-content/uploads/2016/09/RegExCheatsheet.pdf

【讨论】:

    【解决方案2】:

    给你。

    stringr::str_remove_all(stringi::stri_escape_unicode(t1), "\\\\u0")
    

    输出为

    [1] "1002003004005"
    

    【讨论】:

      猜你喜欢
      • 2017-10-16
      • 1970-01-01
      • 1970-01-01
      • 2015-10-08
      • 2012-08-02
      相关资源
      最近更新 更多