Ich versuche, einen Code zu schreiben, der unterstützende Begriffe (z. B. 'detect' 'evidence') identifiziert, sofern kein Negationsausdruck bis zu 3 Wörter ist vor.Negatives Lookbehind- oder temperiertes Muster zum Überprüfen von zwei oder drei Wörtern vor einer Zeichenfolge
Einige Beispiele: „FISH-Tests nicht Beweis für eine BCL2 Translokation bieten“ „FISH-Tests nicht BCL2 Translokation detect“
Ich habe versucht, mit Lookbehind, aber da es eine genaue Länge benötigt, kann ich nicht habe die Flexibilität, 1-3 Wörter zurückzuschauen.
Ich versuchte mit einem temperierten Punkt, aber es gibt eine beliebige Anzahl von Wörtern.
Der Code, den ich derzeit habe, sieht nur ein einziges Wort vor dem 'Support Diagnose' Begriff. mit (*SKIP)(*FAIL)
bis zu drei Wörter
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)
Vielen Dank. Funktioniert super !!! Ich habe "(? 1)" in "(? -1)" geändert, so dass die Referenz relativ wäre (d. H. Zu der letzten Erfassungsgruppe vor dem Muster). Ich versuche immer noch, das Konzept von _consuming_ vollständig zu verstehen. In diesem Fall würden _w + _ und _w ++ _ gleich funktionieren? – user2387584
@ user2387584: In '\ W ++' verbietet der Possessiv-Quantor das Backtracking, er ist hier nützlich, wenn das folgende negative Lookahead '(?! (1))' fehlschlägt. Auf diese Weise schlägt die nicht einfangende Gruppe schneller fehl. Beachten Sie, dass Sie mehr oder weniger den gleichen Effekt erzielen können, wenn Sie schreiben: '(?: \ W + \ b (?! (? 1)) \ w +)' wegen des Mechanismus zur automatischen Possibilisierung. –