【问题标题】:How to escape a backslash in R? [duplicate]如何逃避R中的反斜杠? [复制]
【发布时间】:2013-02-14 16:16:47
【问题描述】:

我在 R 中工作,在转义反斜杠时遇到了麻烦。我正在使用库stringr

install.packages("stringr", repos='http://cran.us.r-project.org')
library("stringr")

我想做str = str_replace_all(str, "\", "")

所以我尝试了str = str_replace_all(str, "\\", ""),但它不起作用。

我该怎么办?

【问题讨论】:

  • @paul-fournel 您的解决方案不起作用(不再?) - gsub("([\])","", "C:\subfolder") 抛出无法识别的转义错误。
  • "C:\subfolder" 不是一个有效的字符串开头。如果你在终端只执行这部分,你会遇到同样的错误
  • @joran 我给 Achim Zeileis 发送了电子邮件,您将在 fortunes 软件包的下一个版本中。
  • @csgillespie,你会考虑重新提出这个问题吗?链接为已经有答案的问题确实提供了间接答案。但是需要花点心思才能弄清楚,如果使用str_replace_allgsub,字符串会被转换两次,需要\\\\ 作为输入才能得到\ 。这里的答案解释了这一点。也许应该更改问题标题。

标签: r backslash stringr


【解决方案1】:

我找到了一个可行的解决方案

str = gsub("([\\])","", str)

【讨论】:

  • 根据我的评论,使用"\\\\" 作为模式也可以(使用gsubstr_replace_all
  • gsub("\\", "", str, fixed=TRUE) 也可以。您只需要记住在 R 中,\` is only one character. Try the following: x
  • 在 RE 中,\\ 匹配 \。由于您需要将每个 \ 转换为 R 将其理解为 \,因此您需要使用 gsub("\\\\","", str)
  • @paul 此代码行适用于常规反斜杠,但像“1\2”这样的字符串会被“1\002”替换,“5\7”也会被“5\a”替换.为什么会这样?
【解决方案2】:

使用Hmisc::escapeRegexHmisc::escapeBS 自动转义反斜杠和其他正则表达式特殊字符。

【讨论】:

  • 甚至Hmisc 也不会让你完全escapeBS,因为最终BS 是不可避免的(尤其是在编程中,而rep('especially', 2) 在R 中)。
猜你喜欢
  • 2022-11-24
  • 2011-02-18
  • 2016-07-07
  • 1970-01-01
  • 2023-02-07
  • 2020-07-11
  • 2011-08-11
  • 2017-05-07
  • 1970-01-01
相关资源
最近更新 更多