如何仅替换位于数字之间的字符并保持位置不同的字符不变
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."
如何替换“.”位于带有“,”的数字内,但不替换“。”位于其他地方?
输入数据:
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."