2016-12-16 16 views
3

私はONEバックスラッシュと、このような空白と空白を交換したい:私はmultiple backslashesで置換する方法を見つけたがそれを適応することができませんでした1つのバックスラッシュで空白を交換

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

単一のバックスラッシュ。

私はこれまでのところ、これを試してみました:

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()空白でシェルコマンドのためにそれらを使用するには

\

/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つの文字、1つのスペース、およびバックスラッシュは、比較のために

nchar(y) ## 8 

\n(改行文字)を考慮

0。

ファイルパスを構築している場合は、スラッシュを使用する方が簡単です。フォワードスラッシュは、すべてのオペレーティングシステム(Windowsでも)のRでファイルセパレータとして機能します。またはfile.path()をチェックしてください。

4

スペースを1つのバックスラッシュとスペースで置き換えるには、正規表現を使用する必要はありません。gsub(" ", "\\ ", x)最初の試みを使用してください(正規表現を使用する必要はありません)。 fixed=TRUEで:

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

online R demo

cat機能は "本物"、文字通りのバックスラッシュが表示されます参照してください。

関連する問題