【问题标题】:How to replace a symbol by a backslash in R?如何用R中的反斜杠替换符号?
【发布时间】:2015-01-07 11:17:21
【问题描述】:

您能帮我用 R 中的反斜杠替换字符吗?我的试用:

gsub("D","\\","1D2")

提前致谢

【问题讨论】:

  • @DavidArenburg 正确,该字符串稍后在 Sweave/LaTex 中用作路径
  • 对于不应该使用反斜杠的路径。所有现代操作系统都支持正斜杠作为路径分隔符,使用反斜杠从不是正确的选择,因为它在大多数操作系统上工作(基本上它只适用于视窗)。如果您不想使用正斜杠(无论出于何种原因),请改用 .Platform$file.sep 的值。

标签: regex r


【解决方案1】:

您需要重新转义反斜杠,因为它需要作为普通 R 字符串的一部分转义一次(因此'\\' 而不是'\'),并且此外它的处理方式不同gsub 在替换模式中,所以它需要再次转义。以下作品:

gsub('D', '\\\\', '1D2')
# "1\\2"

结果看起来与期望的输出不同的原因是 R 实际上并没有打印结果,它打印了一个可解释的 R 字符串(注意周围的引号!)。但是,如果您使用catmessage,则打印正确:

cat(gsub('D', '\\\\', '1D2'), '\n')
# 1\2

【讨论】:

  • 感谢第二部分。为什么我只能让它打印 2 个反斜杠的倍数,这让我发疯了。
【解决方案2】:

当从键盘输入反斜杠时,总是转义它们:

gsub("D","\\\\","1D2")
#[1] "1\\2"

或者,

gsub("D","\\","1D2", fixed=TRUE)
#[1] "1\\2"

或者,

library(stringr)
str_replace("1D2","D","\\\\")
#[1] "1\\2"

注意:如果你想要像"1\2" 这样的输出,恐怕你不能在 R 中做到这一点(至少据我所知)。您可以在路径名中使用正斜杠来避免这种情况。

有关详细信息,请参阅 R 帮助中提出的此问题:How to replace double backslash with single backslash in R

【讨论】:

  • 不是这个“1\\2”的结果。但是如何获得一个反斜杠,这意味着一个反斜杠,又名“1\2”
  • @Floo0 如果您在屏幕上看到1\\2,则表示一个反斜杠,而不是两个。
【解决方案3】:
gsub("\\p{S}", "\\\\", text, perl=TRUE);

\p{S} ... 匹配 Unicode 类别符号中的一个字符。

【讨论】:

  • 那没有给出想要的输出
  • 任务是替换一个符号,而不是一个字符。
猜你喜欢
  • 2017-03-10
  • 2020-01-17
  • 1970-01-01
  • 2014-09-09
  • 2011-09-06
  • 1970-01-01
  • 2015-02-14
  • 1970-01-01
  • 2017-07-25
相关资源
最近更新 更多