Это регулярное выражение, кажется, делает то, что вам нужно:
(\\.[^.]*column[^.]*Barr[^.]*)|(\\.[^.]*Barr[^.]*column[^.]*)
Оно будет начинаться с точки (.
) и захватывает все, что не является точкой, но также имеет column
и Barr
,Или то же самое с обоими словами в другом порядке.
Пример:
try = c("I am a sentence.I am a sentence and I contain Barr. I contain other things. I contain column as well.",
"Here we go. I am a sentence and I contain column but also Barr. I only contain Barr. I am too.",
"I am a sentence and I contain column but also Barr. I only contain Barr. I am too.",
"I contain column and Barr. I have Barr and column. I don't.",
"Hello. I contain Barr and column but also Barr. I only contain Barr. I am too.")
k = sapply(try, function(x){
str_extract(paste0(".",x), "(\\.[^.]*column[^.]*Barr[^.]*)|(\\.[^.]*Barr[^.]*column[^.]*)")
})
names(k) = NULL
Результат:
[1] NA
[2] ". I am a sentence and I contain column but also Barr"
[3] ".I am a sentence and I contain column but also Barr"
[4] ".I contain column and Barr"
[5] ". I contain Barr and column but also Barr"
Если вы используете str_extract_all
имейте в виду, что он возвращает список совпадений.
[[1]]
character(0)
[[2]]
[1] ". I am a sentence and I contain column but also Barr"
[[3]]
[1] ".I am a sentence and I contain column but also Barr"
[[4]]
[1] ".I contain column and Barr" ". I have Barr and column"
[[5]]
[1] ". I contain Barr and column but also Barr"
Я добавил paste0(".",x)
, чтобы обнаружить предложения, которые содержат оба слова и являются первыми (они не начинаются с точки).