如何仅替换位于数字之间的字符并保持位置不同的字符不变

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

如何替换“.”位于带有“,”的数字内,但不替换“。”位于其他地方?

输入数据:

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

预期输出:

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

我试过了:

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

但这不起作用。

提前致谢。

一个可能的解决方案,基于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."

或者,在base R

gsub("(?<=\d)\.(?=\d)", ",", x_input, perl = T)

#> [1] "23,344,) abcd, 12899,2, (,  efg; abef. gfdc."

用第一个数字、逗号和第二个数字替换数字、点和数字。

(交替使用模式

r"{(\d)\.(\d?)}"

如果在点之前有一个数字就足够了,但在点之后没有数字。)

没有使用包。

gsub(r"{(\d)\.(\d)}", r"{,}", x_input)
## [1] "23,344,) abcd, 12899,2, (,  efg; abef. gfdc."