2017-10-21 4 views
-1

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)

Antwort

1

A Lookbehind nicht in dieser Situation hilft, können, was Sie tun, ist systematisch die negativen Begriffen zu suchen und Teile der Zeichenfolge zu verwerfen:

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

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

+0

@ 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. –

Verwandte Themen