2016-12-16 55 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功能顯示 「真實的」,字面反斜槓。