Почему stringr :: str_replace () соответствует каждому символу в строке как "."? - PullRequest
0 голосов
/ 27 марта 2019
library(stringr)
y4=c("yes i do")
str_replace_all(y4,".","_")
[1] "________"

str_replace_all(y4," ","_")
[1] "yes_i_do"

y4=c("yes i do.")
str_replace_all(y4," ","_")
[1] "yes_i_do."

Если вы попытаетесь заменить "." в строке каждый символ заменяется.

1 Ответ

1 голос
/ 27 марта 2019

stringr по умолчанию использует регулярные выражения (регулярные выражения), мощный инструмент поиска.. является подстановочным знаком regex для любого символа, кроме новой строки.Если вам нужен литерал ., вы должны экранировать его с обратной косой чертой, например, \. в регулярном выражении, но поскольку R интерпретирует строку, нам нужен еще один обратный слеш для экранирования первого обратного слэша, поэтому вы используете \\.

* 1007.* Обязательный xkcd

Для вашего примера:

library(stringr)
y4 <- c("yes i do.") #added a period so we can see the replacement.
str_replace_all(y4,"\\.","_")
[1] "yes i do_"

В качестве альтернативы, если вы хотите использовать выражение fixed без синтаксиса регулярных выражений, вы можете использовать:

str_replace_all(y4, fixed("."),"_")
[1] "yes i do_"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...