Попробуйте:
sum(grepl("(?<![A-Za-z])the(?![A-Za-z])", x, perl = T))
Это дает сумму 2 на вашем примере.
Но давайте рассмотрим также несколько более сложный пример:
x <- c("the_dog", "the_cat", "dog", "theano", "menthe", " the")
Вывод:
[1] 3
Выше мы пытаемся сопоставить любой the
, который не 'не иметь другой буквы до или после (например, theano
).
Вы также можете добавить в []
другие вещи, которые вы не хотели бы сопоставлять, например, если бы вы не считали the99
словом the
, вы бы сделали [A-Za-z0-9]
и т. Д.
Вы также можете использовать вышеприведенное с stringr
, например (я включил исключение чисел, поэтому ниже the99
не будет считаться словом):
library(stringr)
sum(str_detect(x, "(?<![A-Za-z0-9])the(?![A-Za-z0-9])"))