Попробуйте:
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])"))
(источник: scottgu.com )
Вам нужно что-то вроде этого? Используйте библиотеку динамических запросов Linq (загрузка включает в себя примеры).
Дополнительные примеры см. В блоге ScottGu .
Вы также можете использовать PredicateBuilder из LinqKit, чтобы связать несколько типов лямбда-выражений с помощью Or или And.
У меня был такой же вопрос ( Пользовательский фильтр для linq ), и @tvanfosson рассказал мне о Dynamic Linq ( http://code.msdn.microsoft. com / csharpsamples ).