首页 > 解决方案 > 在单词第二次出现后匹配所有内容

问题描述

我在 R 中有一个字符串,我想在第二次出现单词后使用正则表达式匹配所有内容

例如:在第二次出现后返回所有内容is

"This is a string of example. this is what i should get in return".

预期产出

what i should get in return

我试过类似的东西,([^is]+)(?:is[^is]+){2}$但它不起作用。

谢谢。

标签: rregex

解决方案


您可以使用 PCRE 模式,例如

^(?>.*?\sis\s+){2}\K.*

查看正则表达式演示

细节

  • ^- 字符串的开始
  • (?>.*?\\sis\\s+){2}- 一个原子组匹配两次出现:
    • .*- 除换行符以外的任何 0+ 个字符,尽可能多
    • \s- 一个空格
    • is- 一个字is
    • \s+- 1+ 空格
  • \K- 匹配重置运算符
  • .*- 线路的其余部分。

R 演示

x <- "This is a string of example. this is what i should get in return"
regmatches(x, regexpr("^(?>.*?\\sis\\s+){2}\\K.*", x, perl=TRUE))
## => [1] "what i should get in return"

stringr

stringr::str_match(x, "^(?>.*?\\sis\\s+){2}(.*)")[,2]

推荐阅读