Как сказать (\ w + \ W +) 4 раза в регулярном выражении (R gsub) - PullRequest
3 голосов
/ 12 июня 2019

(В R gsub (),) мне нужно записать четыре слова, встречающиеся после определенной фразы, в большую строку.Опираясь на предложенную мудрость здесь , я придумал: ^.*\\b(particular phrase)\\W+(\\w+\\W+\\w+\\W+\\w+\\W+\\w+).*$

Например:

this_txt <- "Blah blah particular phrase Extract These Words Please for the blah blah. Ignore blah this other stuff blah blah, blah."
this_pattern <- "^.*\\b(particular phrase)\\W+(\\w+\\W+\\w+\\W+\\w+\\W+\\w+).*$"
gsub(this_pattern, "\\2", this_txt, ignore.case = T)
# [1] "Extract These Words Please"

Но повторение \\w+\\W+ в схемедовольно неприлично.Конечно, есть лучший способ.Я думал, что ^.*\\b(particular phrase)\\W+(\\w+\\W+){4}.*$ может работать, но это не так.

1 Ответ

3 голосов
/ 12 июня 2019

Вы можете использовать

^.*\b(particular phrase)\W+((?:\w+\W+){3}\w+).*$

В R

this_pattern <- "^.*\\b(particular phrase)\\W+((?:\\w+\\W+){3}\\w+).*$"

См. regex demo

(\w+\W+\w+\W+\w+\W+\w+) заменено на ((?:\w+\W+){3}\w+).((?:\w+\W+){3}\w+) - это группа захвата ((...)), которая содержит два подшаблона:

  • (?:\w+\W+){3} - группа без захвата , соответствующая тремповторения
    • \w+ - 1 или более символов слова
    • \W+ - 1 или более несловарных символов
  • \w+ -1 или более слово chars.
...