R - почему str_detect возвращает результат, отличный от grepl, при использовании границы слова в словах, заканчивающихся тире - PullRequest
4 голосов
/ 04 апреля 2019

Страница справки для str_detect гласит «Эквивалент grepl (pattern, x)», однако:

str_detect("ALL-", str_c("\\b", "ALL-", "\\b"))
[1] FALSE

В то время как

grepl(str_c("\\b", "ALL-", "\\b"), "ALL-")
[1] TRUE

Я полагаю, что один из них не работает, как предполагалось? Или я что-то упустил?

1 Ответ

1 голос
/ 04 апреля 2019

Когда вы добавляете аргумент perl = TRUE к grepl(), он дает тот же результат:

> grepl(str_c("\\b", "ALL-", "\\b"), "ALL-")
[1] TRUE
> grepl(str_c("\\b", "ALL-", "\\b"), "ALL-", perl = T)
[1] FALSE

Этот аргумент означает, что grepl() будет использовать Perl-совместимое регулярное выражение.

В ?grep есть это предупреждение, которое может быть связано?

Режим POSIX 1003.2 для gsub и gregexpr не работает правильно с повторяющимися границами слов (например, pattern = "\ b"). Используйте perl = TRUE для таких совпадений (но это может работать не так, как ожидается, для входных данных, отличных от ASCII, так как значение «word» зависит от системы).

...