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.
CodePudding user response:
Replace a digit, dot and digit with the first digit, a comma and the second digit.
(Alternately use the pattern
r"{(\d)\.(\d?)}"
if it is sufficient to have a digit before the dot but not after the dot.)
No packages are used.
gsub(r"{(\d)\.(\d)}", r"{\1,\2}", x_input)
## [1] "23,344,) abcd, 12899,2, (, efg; abef. gfdc."
CodePudding user response:
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."