Search code examples
rregexstringgsubstringi

How to replace only characters located between numbers and leave unchanged those with different locations


How to replace "." that is located within numbers with ",", but not replace "." located elsewhere?

Input data:

x_input="23.344,) abcd, 12899.2, (,  efg; abef. gfdc."

Expected ouput:

x_output
"23,344,) abcd, 12899,2, (,  efg; abef. gfdc."

I tried:

x_input<-"23.344,) abcd, 12899.2, (,  efg; abef. gfdc."
x_output<-gsub(".", ",", x_input))))

But this does not work.

Thanks in advance.


Solution

  • A possible solution, based on stringr::str_replace_all:

    library(tidyverse)
    
    x_input="23.344,) abcd, 12899.2, (,  efg; abef. gfdc."
    
    x_input %>% 
      str_replace_all("(?<=\\d)\\.(?=\\d)", ",")
    
    #> [1] "23,344,) abcd, 12899,2, (,  efg; abef. gfdc."
    

    Or, in base R,

    gsub("(?<=\\d)\\.(?=\\d)", ",", x_input, perl = T)
    
    #> [1] "23,344,) abcd, 12899,2, (,  efg; abef. gfdc."