正则表达式从列表中查找单词,当特定单词未出现之前3个单词

时间:2019-06-05 14:27:33

标签: r regex

我想从列表中找到特定单词的所有匹配项,但是当特定单词不出现在3个单词之前。

例如:

始终查找文本中出现“ good | best | better”,但之前没有出现“ no | not | none”的情况。

我尝试过类似的事情:

true

但是它不起作用。

2 个答案:

答案 0 :(得分:4)

您可以通过PCRE选项在R中使用此perl=TRUE正则表达式:

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

RegEx Demo

在您的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)用于失败并跳过我们不希望匹配的匹配项。

答案 1 :(得分:0)

如果我们只想失败no及其它派生词,我们将从一个简单的表达式开始,例如:

^(?!.*no).*times.*$

然后,如果需要,我们将添加单词边界,并将其扩展为:

^(?!.*\bno\b|.*\bnot\b|.*\bnone\b).*times.*$

Demo 1

最后,我们将使用以下单词添加所需的单词:

^(?!.*\bno\b|.*\bnot\b|.*\bnone\b)(?=.*\bgood\b|.*\bbest\b|.*\bbetter\b).*times.*$

Demo 2

RegEx电路

jex.im可视化正则表达式:

enter image description here