用一个反斜杠替换空白区域

时间:2016-12-16 14:21:55

标签: r regex replace character

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

"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

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

2 个答案:

答案 0 :(得分:5)

您的问题是字符串的内容与其表示之间的混淆。当您在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()。 (我不知道你想要做什么,我不能多说。)

答案 1 :(得分:4)

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

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

查看online R demo

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