Reputation: 1572
Could you help me to replace a char by a backslash in R? My trial:
gsub("D","\\","1D2")
Thanks in advance
Upvotes: 4
Views: 1699
Reputation: 3158
When inputting backslashes from the keyboard, always escape them:
gsub("D","\\\\","1D2")
#[1] "1\\2"
or,
gsub("D","\\","1D2", fixed=TRUE)
#[1] "1\\2"
or,
library(stringr)
str_replace("1D2","D","\\\\")
#[1] "1\\2"
Note: If you want something like "1\2"
as output, I'm afraid you can't do that in R (at least in my knowledge). You can use forward slashes in path names to avoid this.
For more information, refer to this issue raised in R help: How to replace double backslash with single backslash in R.
Upvotes: 5
Reputation: 545588
You need to re-escape the backslash because it needs to be escaped once as part of a normal R string (hence '\\'
instead of '\'
), and in addition it’s handled differently by gsub
in a replacement pattern, so it needs to be escaped again. The following works:
gsub('D', '\\\\', '1D2')
# "1\\2"
The reason the result looks different from the desired output is that R doesn’t actually print the result, it prints an interpretable R string (note the surrounding quotation marks!). But if you use cat
or message
it’s printed correctly:
cat(gsub('D', '\\\\', '1D2'), '\n')
# 1\2
Upvotes: 5
Reputation: 4887
gsub("\\p{S}", "\\\\", text, perl=TRUE);
\p{S} ... Match a character from the Unicode category symbol.
Upvotes: 0