gsub() 不会替换 '.' (点)

问题描述 投票:0回答:4

我想将

"2014.06.09"
中的点替换为
"2014-06-09"
。我正在使用 gsub() 函数。如果

x <-  "2014.06.09"
gsub('2', '-' ,x)
# [1] "-014.06.09"

但是当我尝试时

gsub('.', '-', x)
# [1] "----------"

而不是

"2014-06-09"

class(x)
# "character"

有人可以建议我一种方法来解决这个问题以及为什么它不起作用

'.'
(点)

r regex gsub stringr
4个回答
169
投票

您可能需要转义

.
,这是一个特殊字符,表示“任何字符”(来自@Mr Flick的评论)

 gsub('\\.', '-', x)
 #[1] "2014-06-09"

或者

gsub('[.]', '-', x)
#[1] "2014-06-09"

或者正如 @Moix 在评论中提到的,我们也可以使用

fixed=TRUE
而不是转义字符。

 gsub(".", "-", x, fixed = TRUE)

6
投票

对于更复杂的任务,stringr 包可能会很有趣

https://cran.r-project.org/web/packages/stringr/vignettes/stringr.html

https://github.com/rstudio/cheatsheets/raw/master/strings.pdf

library(stringr)

str_replace_all(x,"\\.","-")
## [1] "2014-06-09"

或者

str_replace_all(x,"[.]","-")
## [1] "2014-06-09"

4
投票

使用 R 4.0.0 中引入的原始字符串,可以做到

gsub(r"(\.)", "-", x)
# [1] "2014-06-09"

1
投票

尝试

chatrtr

x <-  "2014.06.09"
chartr(".", "-", x)
## [1] "2014-06-09"
© www.soinside.com 2019 - 2024. All rights reserved.