str_extract: сопоставлять слова рядом друг с другом - PullRequest
0 голосов
/ 28 октября 2018

Я хотел бы извлечь строку, соответствующую 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 Ответ

0 голосов
/ 28 октября 2018

Ваше утверждение за заявлением не ограничено, то есть оно может соответствовать любому количеству токенов.Движок должен статически быть в состоянии определить длину объекта просмотра.

Кстати, кажется, у вас есть неравные скобки в регулярном выражении, что означает, что я не знаю, какие токены должны быть включены в просмотр сзади.,Если вы добавите что-то вроде \w+, оно будет неограниченным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...