r 中的正则表达式误解
regex misunderstanding in r
我好像不太懂gsub 和stringr。
示例:
> a<- "a book"
> gsub(" ", ".", a)
[1] "a.book"
好的。但是:
> a<-"a.book"
> gsub(".", " ", a)
[1] " "
我会预料
"a book"
我将句号替换为 space。
另外:srintr
:str_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)
我好像不太懂gsub 和stringr。 示例:
> a<- "a book"
> gsub(" ", ".", a)
[1] "a.book"
好的。但是:
> a<-"a.book"
> gsub(".", " ", a)
[1] " "
我会预料
"a book"
我将句号替换为 space。
另外:srintr
:str_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)