2017-01-03 16 views
3

私はknitrでR解析を出力したいのですが、私はアンダースコアの行を含むテキストを持っています。私はそれらをエスケープさせなければならないので、すべて_\_に変えてください。バックスラッシュをgsubで挿入します

しかし、バックスラッシュも正規表現の特殊文字なので、実際にはアンダースコアの前にバックスラッシュを1つ挿入する方法はありませんでした。奇数のバックスラッシュがエラーを生成するようです(最後のものはアンダースコアとペアになっているようですが)。偶数でエスケープしようとしてもうまくいきませんでした。

a <- "blah _ blah ___ blah" 
> gsub("_", "\\_", a) 
[1] "blah _ blah ___ blah" 
> gsub("_", "\\\\_", a) 
[1] "blah \\_ blah \\_\\_\\_ blah" 
> gsub("_", "\\\_", a) 
Error: '\_' is an unrecognized escape in character string starting ""\\\_" 
> gsub("_", "\_", a) 
Error: '\_' is an unrecognized escape in character string starting ""\_" 

正しい方法は何ですか。 gsubとregexを使う必要はありませんが、私は単一の文字列に簡単にエスケープする必要があります。

+0

でそれを見つけることができ\

cat(gsub("_", "\\\\_", a)) #blah \_ blah \_\_\_ blah 

この質問は\

gsub("_", "\\\\_", a) 

をエスケープする必要があります*重複ではありません。他の質問の答えは、2つのバックスラッシュを使用することです - 私はそれを試したと私のテキストで見ることができ、それは動作しません。 – rumtscho

+0

これはすべて二重引用符であり、* '' \ '' *で置き換えられた問題はかなりうまく説明されています。アクランは何度もそれに答えました。ここには[私の答え](http://stackoverflow.com/questions/41186399/replacing-white-space-with-one-single-backslash/41186646#41186646)です。 –

+0

@WiktorStribiżewよ、申し訳ありません、今すぐ入手しました。 「猫を通して走らせなければならない」という部分は、私を本当に混乱させました。 – rumtscho

答えて

3

は、我々はそれを印刷した場合、それが唯一の我々はnchar

nchar("\\") 
#[1] 1 
関連する問題