r 中的正则表达式误解

regex misunderstanding in r

我好像不太懂gsub 和stringr。 示例:

 > a<- "a book"

> gsub(" ", ".", a)

[1] "a.book"

好的。但是:

> a<-"a.book"

> gsub(".", " ", a)

[1] "      "

我会预料

"a book"

我将句号替换为 space。

另外:srintrstr_replace(a, ".", " ") returns:

" .book"

str_replace_all(a, ".", " ")returns

" "

我可以使用 stringi: stri_replace(a, " ", fixed="."):

"a book"

我只是想知道为什么 gsub(和 str_replace)没有像我预期的那样运行。它们在用另一个字符替换 space 时有效,但反之则不然。

那是因为 gsub 的第一个参数,即 pattern 实际上是一个正则表达式。在正则表达式中,句点 . 是一个元字符,它匹配任何单个字符,参见 ?base::regex。在您的情况下,您需要通过以下方式转义句点:

gsub("\.", " ", a)