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:> 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)?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:> 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). UsingYou are confusing the object and the printed representation: see ?regexp.> cat(gsub("%","\\\\%","income 0%-33%"), "\n")income 0\%-33\% You really do want the object which prints in R "income 0\\%-33\\%".> 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.Time for an undate (not that it affects this, but how objects print has been changed). -- Brian D. Ripley, ripley at stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595
On 1 Feb 2006, mailing-lists at rhkoning.com wrote:> 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 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.> gsub("%", "\\\\%", "income 0%-33%")[1] "income 0\\%-33\\%"> cat(gsub("%", "\\\\%", "income 0%-33%"), "\n")income 0\%-33\% The string "\\" in R contains one character (see nchar()), not two. It can be confusing. HTH, + seth