[R] Problem with the str_replace function

Hervé Pagès hp@ge@@on@g|thub @end|ng |rom gm@||@com
Wed Mar 17 06:19:52 CET 2021


Hi,

stringr::str_replace() treats the 2nd argument ('pattern') as a regular 
expression and some characters have a special meaning when they are used 
in a regular expression. For example the dot plays the role of a 
wildcard (i.e. it means "any character"):

   > str_replace("aaXcc", "a.c", "ZZ")
   [1] "aZZc"

If you want to treat a special character literally, you need to escape 
it with a double backslahe '\\':

   > str_replace(c("aaXcc", "aa.cc"), "a.c", "ZZ")
   [1] "aZZc" "aZZc"

   > str_replace(c("aaXcc", "aa.cc"), "a\\.c", "ZZ")
   [1] "aaXcc" "aZZc"

Turns out that parenthesis are also special characters so you also need 
to escape them:

   > str_replace("aa(X)cc", "a(X)c", "ZZ")
   [1] "aa(X)cc"

   > str_replace("aa(X)cc", "a\\(X\\)c", "ZZ")
   [1] "aZZc"

There are plenty of example in the man page for str_replace() (see 
'?str_replace') including examples showing the use of parenthesis in the 
pattern.

Hope this helps,

H.


On 3/16/21 5:34 PM, phil using philipsmith.ca wrote:
> I have a problem with the str_replace() function in the stringr package. 
> Please refer to my reprex below.
> 
> I start with a vector of strings, called x. Some of the strings contain 
> apostrophes and brackets. I make a simple replacement as with x1, and 
> there is no problem. I make another simple replacement, x2, where the 
> pattern string has an apostrophe. Again no problem. Then I make a third 
> replacement, x3, where the pattern has opening and closing brackets and 
> the function still works fine. Finally I make a replacement where the 
> pattern has both an apostrophe and opening and closing brackets and the 
> replacement does not work. I tried to solve this by putting backslashes 
> before the apostrophe and/or the brackets, but that accomplished 
> nothing. I am stumped.
> 
> # Reprex for str_replace problem
> 
> library(stringr)
> 
> x <- c(
>    "Clothing and footwear",
>    "Women's clothing",
>    "Women's footwear (excluding athletic)",
>    "Clothing accessories (belts and so on)",
>    "Clothing and footwear",
>    "Women's clothing",
>    "Women's footwear (excluding athletic)",
>    "Clothing accessories (belts and so on)"
> )
> x
> x1 <- str_replace(x,
>    "Clothing and footwear",
>    "Clothing and shoes"
> )
> x1
> x2 <- str_replace(x,
>    "Women's clothing",
>    "Women's clothing goods"
> )
> x2
> x3 <- str_replace(x,
>    "Clothing accessories (belts and so on)",
>    "Clothing accessories")
> x3
> x4 <- str_replace(x,
>    "Women's footwear (excluding athletic)",
>    "Women's footwear")
> x4
> 
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.

-- 
Hervé Pagès

Bioconductor Core Team
hpages.on.github using gmail.com



More information about the R-help mailing list