grepl в R: ложное совпадение, несмотря на тире внутри слова

Ниже приведен минимальный воспроизводимый пример:

v=c("\\<skill-saw\\>","\\<saw blade\\>")
text="xx placed his hand beneath skill-saw blade"
sapply(v,grepl,text)

Последняя команда возвращает c(TRUE,TRUE), где я ожидал c(TRUE,FALSE). Есть идеи, как этого добиться? Идея состоит в том, что ключевое слово "skill-saw" должно быть обнаружено как присутствующее в тексте, а не ключевое слово "saw blade"...

Заранее большое спасибо за вашу помощь!

1 ответ

Решение

Ты можешь попробовать regex смотреть за

v <- c('(?<= )\\bskill-saw\\b', '(?<= )\\bsaw blade\\b')
 unname(sapply(v, grepl, text, perl=TRUE))
 #[1]  TRUE FALSE

Обновить

Исходя из нового "текста", может быть

text1 <- "xx placed his hand beneath skill saw-blade"

v <- c('(?<= )\\bskill-saw\\b', '(?<= )\\bsaw-?blade\\b')
unname(sapply(v, grepl, text1, perl=TRUE))
#[1] FALSE  TRUE
Другие вопросы по тегам