2016-12-16 54 views
3

更换白色的空间,我想更换一个反斜杠一个空白和空白像这样:一个单反斜线

"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

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

+0

正斜杠对此更好 –

+0

我编辑了我的问题以演示使用。 – loki

+0

你* *可能*能够围绕包含带引号的空格的路径来让它在'system()'中工作...... –

回答

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(换行符)

0。

如果您正在构建文件路径,可能会更容易使用正斜杠 - 而不是正斜杠在所有操作系统(甚至是Windows)上作为R中的文件分隔符。或退房file.path()。 (不知道你想要做什么,我不能说更多。)

4

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

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

看到online R demo

cat功能显示 “真实的”,字面反斜杠。