Skip to content

inserting one backslash

4 messages · RH Koning, Sundar Dorai-Raj, Brian Ripley +1 more

#
Hello, I am not very familiar with regular expressions and escaping. I 
need to replace the %-signs in a character vector with elements as 
"income 0%-33%# to be replaced by "income 0\%-33\%" (for later use in 
LaTeX). Using

gsub("%","\\%","income 0%-33%")

does not give the desired result. However, gsub("%","\\\\%","income 
0%-33%") gives "income 0\\%-33\\%", one backslash too much. What is the 
appropriate expression to get the desired output (one backslash before 
each %-sign)?

I am using R 2.1.0 on suse linux 9.2.

Thanks, Ruud
#
RH Koning wrote:
Actually, you got the answer. See the difference between:

 > gsub("%","\\\\%","income 0%-33%")
[1] "income 0\\%-33\\%"
 > cat(gsub("%","\\\\%","income 0%-33%"))
income 0\%-33\%

HTH,

--sundar
#
On Wed, 1 Feb 2006, RH Koning wrote:

            
You are confusing the object and the printed representation: see ?regexp.
income 0\%-33\%

You really do want the object which prints in R "income 0\\%-33\\%".
Time for an undate (not that it affects this, but how objects print has 
been changed).
#
On 1 Feb 2006, mailing-lists at rhkoning.com wrote:

            
I think you are on the right track with the second pattern "\\\\%".
There is a difference between what print(s) will display and what
cat(s) will display.
[1] "income 0\\%-33\\%"
income 0\%-33\%  

The string "\\" in R contains one character (see nchar()), not two.  
It can be confusing.

HTH,

+ seth