用于在字符串之前检查一个两个或三个单词的负向外观或调节模式

时间:2017-10-21 15:49:49

标签: r regex pcre regex-lookarounds

我正在尝试编写一个能够识别支持条款的代码(即'检测''证据'),除非在之前有一个否定词最多3个字。

一些例子: “FISH测试未发现BCL2易位” “FISH试验没有提供BCL2易位的证据”

我尝试使用lookbehind,但由于它需要一个确切的长度,我不能灵活地回顾1-3个单词。

我尝试使用钢化点,但它会提供任意数量的单词。

我目前拥有的代码在“支持诊断”术语之前只看一个单词。

grepl("(?<!\\bnot\\b\\s|cannot\\s|n't\\s|\\bno\\b\\s|negative\\s)(reveal|seen|show|detect|demonstrate|confirm|identif|evidence|suggest|positive|observe)(?:(?!\\bnot\\b)(?!cannot)(?!n't)(?!\\bno\\b)(?!negative for)(?!, ).)*?(bcl-?2|14[q]?[;:]18)"), y, perl=TRUE,ignore.case = T)

1 个答案:

答案 0 :(得分:1)

在这种情况下,后视无助,您可以做的是系统地搜索否定词并使用(*SKIP)(*FAIL)最多三个词来丢弃字符串的一部分:

(\\bnot\\b|\\bcannot\\b|n't\\b)(?:\\W++(?!(?1))\\w+){0,3}(*SKIP)(*F)|\\b(reveal|seen|show)\\b(?!\\snot\\b)