Да, это разрешено до тех пор, пока подпись будет одинаковой. И , на мой взгляд, , да, вы правы, переопределение видимости (например, public -> private) прерывает IS-A. Я полагаю, что у Скотта Майерса «Эффективная серия C ++» есть обсуждение этого вопроса.
Попробуйте:
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])"))
library(stringr)
##with a vector
sum(str_detect(c("the_dog", "the_cat", "dog"),"the"))
##In a dataframe
tibble(x = c("the_dog", "the_cat", "dog")) %>%
filter(str_detect(x, "the")) %>%
nrow()
x <- c("the_dog", "the_cat", "dog")
stringr::str_detect(x, "the")
#> [1] TRUE TRUE FALSE
Создано в 2019-02-23 с помощью пакета представитель (v0.2.1) sup>
Попробуйте также:
x <- c("the_dog", "the_cat", "dog")
sum(stringi::stri_count(x,regex="^the"))#matches the at the beginning
Результат:
[1] 2
Или:
x <- c("the_dog", "the_cat", "dog")
sum(stringi::stri_count(x,regex="the{1,}"))#matches any the