On Mar 7, 2012, at 6:54 AM, Markus Elze wrote:

Hello everybody,
this might be a trivial question, but I have been unable to find this using Google. I am trying to replace double backslashes with single backslashes using gsub.

Actually you don't have double backslashes in the argument you are presenting to gsub. The string entered at the console as "C:\\" only has a single backslash.

> nchar("C:\\")
[1] 3

There seems to be some unexpected behaviour with regards to the replacement string "\\". The following example uses the string C:\\ which should be converted to C:\ .

> gsub("\\\\", "\\", "C:\\")
[1] "C:"

But I do not understand that returned value, either. I thought that the 'repl' argument (which I think I have demonstrated is a single backslash) would get put back in the returned value.


> gsub("\\\\", "Test", "C:\\")
[1] "C:Test"
> gsub("\\\\", "\\\\", "C:\\")
[1] "C:\\"

I thought the parsing rules for 'replacement' were different than the rules for 'patt'. So I'm puzzled, too. Maybe something changed in 2.14?

> sub("\\\\", "\\", "C:\\", fixed=TRUE)
[1] "C:\\"
> sub("\\\\", "\\", "C:\\")
[1] "C:"
> sub("([\\])", "\\1", "C:\\")
[1] "C:\\"

The NEWS file does say that there is a new regular expression implementation and that the help file for regex should be consulted.

And presumably we should study this:

http://laurikari.net/tre/documentation/regex-syntax/

In the 'replacement' argument, the "\\" is used to back-reference a numbered sub-pattern, so perhaps "\\" is now getting handled as the "null subpattern"? I don't see that mentioned in the regex help page, but it is a big "page". I also didn't see "\\" referenced in the TRE documentation, but then again I don't think that "\\" in console or source() input is a double backslash. The TRE document says that "A \ cannot be the last character of an ERE." I cannot tell whether that rule gets applied to the 'replacement'.



I have observed similar behaviour for fixed=TRUE and perl=TRUE. I use R 2.14.1 64-bit on Windows 7.


--
David Winsemius, MD
West Hartford, CT

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to