[R] Regexp pattern but fixed replacement?

Duncan Murdoch murdoch@dunc@n @end|ng |rom gm@||@com
Thu Apr 11 19:11:11 CEST 2024


On 11/04/2024 12:58 p.m., Iris Simmons wrote:
> Hi Duncan,
> 
> 
> I only know about sub() and gsub().
> 
> There is no way to have pattern be a regular expression and replacement 
> be a fixed string.
> 
> Backslash is the only special character in replacement. If you need a 
> reference, see this file:
> https://github.com/wch/r-source/blob/04650eddd6d844963b6d7aac02bd8d13cbf440d4/src/main/grep.c <https://github.com/wch/r-source/blob/04650eddd6d844963b6d7aac02bd8d13cbf440d4/src/main/grep.c>
> particularly functions R_pcre_string_adj and wstring_adj. So just double 
> the backslashes in replacement and you'll be good to go.

Thanks, that's what I've done.

Duncan Murdoch

> 
> On Thu, Apr 11, 2024, 12:36 Duncan Murdoch <murdoch.duncan using gmail.com 
> <mailto:murdoch.duncan using gmail.com>> wrote:
> 
>     I noticed this issue in stringr::str_replace, but it also affects sub()
>     in base R.
> 
>     If the pattern in a call to one of these needs to be a regular
>     expression, then backslashes in the replacement text are treated
>     specially.
> 
>     For example,
> 
>         gsub("a|b", "\\", "abcdef")
> 
>     gives "def", not "\\\\def" as I wanted.  To get the latter, I need to
>     escape the replacement backslashes, e.g.
> 
>         gsub("a|b", "\\\\", "abcdef")
> 
>     which gives "\\\\cdef".
> 
>     I have two questions:
> 
>     1.  Is there a variant on sub or str_replace which allows the
>     pattern to
>     be declared as a regular expression, but the replacement to be declared
>     as fixed?
> 
>     2.  To get what I want, I can double the backslashes in the replacement
>     text.  This would do that:
> 
>          replacement <- gsub("\\\\", "\\\\\\\\", replacement)
> 
>     Are there any other special characters to worry about besides
>     backslashes?
> 
>     Duncan Murdoch
> 
>     ______________________________________________
>     R-help using r-project.org <mailto:R-help using r-project.org> mailing list --
>     To UNSUBSCRIBE and more, see
>     https://stat.ethz.ch/mailman/listinfo/r-help
>     <https://stat.ethz.ch/mailman/listinfo/r-help>
>     PLEASE do read the posting guide
>     http://www.R-project.org/posting-guide.html
>     <http://www.R-project.org/posting-guide.html>
>     and provide commented, minimal, self-contained, reproducible code.
>



More information about the R-help mailing list