代码之家  ›  专栏  ›  技术社区  ›  Refael

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

  •  0
  • Refael  · 技术社区  · 6 年前

    例如:

    找出“好|最好|更好”这个词出现在课文中的所有时间,但是“不|不|没有”这个词出现在三个词之前。

    我试过这样的方法:

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

    但它不起作用。

    0 回复  |  直到 6 年前
        1
  •  4
  •   anubhava    6 年前

    你可以用这个 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

    在你的

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

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

        2
  •  0
  •   Emma    6 年前

    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

    正则表达式电路

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

    enter image description here