【问题标题】:Replacing white space with one single backslash用一个反斜杠替换空格
【发布时间】:2017-05-02 08:50:43
【问题描述】:

我想用一个反斜杠和这样的空格替换一个空格:

"foo bar" --> "foo\ bar"

我找到了如何用 multiple backslashes 替换,但无法将其调整为单个反斜杠。

到目前为止我已经试过了:

x <- "foo bar" 
gsub(" ", "\\ ", x)
# [1] "foo bar"

gsub(" ", "\\\ ", x)
# [1] "foo bar"

gsub(" ", "\\\\ ", x)
# [1] "foo\\ bar"

但是,所有的结果都不能满足我的需要。我需要替换来动态创建文件路径,其中包含名称为

的文件夹

/some/path/foo bar/foobar.txt

要将它们用于system() 空格中的shell 命令,必须使用\ 退出

/some/path/foo\ bar/foobar.txt

你知道如何解决这个问题吗?

【问题讨论】:

  • 正斜杠更适合这个
  • 我编辑了我的问题来演示使用。
  • 可能能够将包含空格的路径用引号括起来,以使其在system()中工作...

标签: r regex replace character


【解决方案1】:

您的问题是字符串的内容与其表示之间的混淆。当您在 R 中以普通方式打印字符串时,您将永远看到单个反斜杠(除非它表示特殊字符,例如 print("y\n")。如果您改用 cat(),您将只能看到一个反斜杠。

x <- "foo bar"
y <- gsub(" ", "\\\\ ", x)
print(y)
## [1] "foo\\ bar"
cat(y,"\n")  ## string followed by a newline
## foo\ bar

字符串中有8个字符; 6 个字母、一个空格和反斜杠。

nchar(y)  ## 8

为了比较,请考虑\n(换行符)。

z <- gsub(" ", "\n ", x)
print(z)
## [1] "foo\n bar"
cat(z,"\n")
## foo
##  bar 
nchar(z)  ## 8

如果您正在构建文件路径,则改用正斜杠可能会更容易 - 在所有操作系统(甚至 Windows)上,正斜杠在 R 中用作文件分隔符。或查看file.path()。 (不知道你到底想做什么,我不能说更多。)

【讨论】:

    【解决方案2】:

    要用一个反斜杠和一个空格替换一个空格,你甚至不需要使用正则表达式,使用你的gsub(" ", "\\ ", x)第一次尝试fixed=TRUE

    > x <- "foo bar" 
    > res <- gsub(" ", "\\ ", x, fixed=TRUE)
    > cat(res, "\n")
    foo\ bar 
    

    查看online R demo

    cat 函数显示“真实”的文字反斜杠。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-14
      • 2012-06-16
      • 1970-01-01
      • 1970-01-01
      • 2021-05-29
      • 1970-01-01
      相关资源
      最近更新 更多