str_extract: сопоставлять слова рядом друг с другом
Я хотел бы извлечь строку соответствия dog|cat
(0-5 слов, \r, \n или пробелы между ними) 1.
и еще немного текста, пока 2.
появляется.
myStrings <- c(
"the dog says: 1. hello cat 2. I do not care",
"the dog barks ba ba ba ba ba ba ba and says: 1. no 2. no",
"the doggie says: 1. hello 2. you",
"the cat is angry and asks: 1. hello dog 2. go away",
"the dog says: 2. nothing 3. nothing")
Мой подход:
str_extract(string=myStrings,pattern=regex("(dog|cat(?:\\w+\\W+){1,5}?1.).*(?=2.)"))
Я попытался реализовать это ( https://www.regular-expressions.info/near.html), однако, мое регулярное выражение соответствует
> [1] "dog says: 1. hello cat " "dog barks ba ba ba ba ba
> ba ba: 1. no " "doggie says: 1. hello " "dog " "dog says: "
Что мне нужно, это
> [1] "dog says: 1. hello cat " "NA" "NA" "the cat is angry and asks: 1. hello dog " "NA"
1 ответ
Ваше утверждение за заявлением не ограничено, то есть оно может соответствовать любому количеству токенов. Двигатель должен статически уметь определять длину заднего вида.
Кстати, кажется, у вас есть неравные скобки в вашем регулярном выражении, что означает, что я не знаю, какие токены должны быть включены в просмотр сзади. Если вы включите что-нибудь вроде \w+
будет неограниченным.