首页 > 解决方案 > 正则表达式从列表中查找单词,当特定单词之前没有出现 3 个单词时

问题描述

我想从列表中找到特定单词的所有匹配项,但是当特定的另一个单词没有出现在之前的 3 个单词的范围内时。

例如:

找出文本中出现单词“good|best|better”但单词“no|not|none”在 3 个单词之前没有出现的所有时间。

我尝试过这样的事情:

(?<!\sno|\snot(\s|\s\w\s|\s\w\s\w\s))(\bgood\b|\bbest\b|\bbetter\b)

但它不起作用。

标签: rregex

解决方案


您可以在选项中使用此正PCRE则表达式:Rperl=TRUE

\b(?:not?|none)(?:\s+\S+){0,2}\s+(good|best|better)\b(*SKIP)(*F)|\b(?:good|best|better)\b

正则表达式演示

在您的R代码中使用:

gregexpr("\\b(?:not?|none)(?:\\s+\\S+){0,2}\\s+(good|best|better)\\b(*SKIP)(*F)|\\b(?:good|best|better)\\b", mystr, perl=TRUE)

PCRE中,动词(*SKIP)(*F)用于失败和跳过我们不想匹配的匹配。


推荐阅读