Suchen der vollständigen Form eines eingeklammerten Akronyms mithilfe von regulären Ausdrücken

Suchen der vollständigen Form eines eingeklammerten Akronyms mithilfe von regulären Ausdrücken

Ich versuche, die vollständige Form von Akronymen zu finden, die in einem Text in Klammern angegeben wurden.

Hier ist ein Beispiel:

Es wurde berichtet, dass sich eine abnorme DNA-Methylierung, eine der wichtigsten epigenetischen Veränderungen bei Krebs, bei einer Untergruppe von Dickdarmkrebs (CRC), dem sogenannten CpG-Insel-Methylator-Phänotyp (CIMP), ansammelt, von dem bekannt war, dass er mit einem CRC mit hoher Mikrosatelliten-Instabilität (MSI) korreliert.

Hier möchte ich in der Lage sein, eine Liste mit Vorkommen in Kurz-/Langform zu erstellen, wie:

CRC - Kolorektaler Krebs

CIMP - CpG-Insel-Methylator-Phänotyp

MSI - Mikrosatellit mit reduzierter Instabilität

Die Sache ist, dass ich alle in Klammern gesetzten Entitäten mithilfe von finden konnte re.findall('(\(.*?\))', s), es sich jedoch als schwierig erweist, die entsprechende Vollform zu finden.

Unter der Annahme, dass alle derartigen Vollformen auf der linken Seite der Klammer stehen, möchte ich Folgendes verwenden2Bedingungen, um die Vollform der Abkürzung in der Klammer zu erfassen.

  • die Anzahl der Wörter darf nicht mehr als 3+|SF| betragen, wobei |SF| die Anzahl der Zeichen in der Kurzform ist (Micro Satellite Reduced Instability (MSI) - hier hat die Langform 4 Wörter, während die Kurzform 3 Zeichen hat)
  • Das erste Wort der Langform beginnt mit dem ersten Buchstaben der Kurzform (z. B.CDarmkrebs (Crc))

Mit meinem derzeitigen Verständnis von regexist es mir nicht gelungen, ein zu schreiben, regexdas die beiden oben genannten Bedingungen löst und alle derartigen Fälle im Text findet.

Können Sie mir hierzu bitte einige Hinweise geben?

Antwort1

Angenommen, Sie verwenden Python:

((\w)\w* )(\w* ){0,3}\((?i)(\2)[^)]*\)

Dieses erfasst das erste Zeichen eines Wortes in Gruppe 2. Auf dieses Wort folgen null bis drei Wörter (erhöhen Sie die Zahl, falls geeignet). Alle Wörter werden durch ein Leerzeichen abgegrenzt. Als Nächstes folgt eine öffnende Klammer, gefolgt von dem in Gruppe 2 erfassten Buchstaben, wobei die Groß-/Kleinschreibung nicht beachtet wird. Darauf folgt der Rest des Klammermusters.

Ich konnte die Anzahl der Wörter nicht mit der Anzahl der Zeichen des Akronyms abgleichen, daher ist eine Ihrer Bedingungen nicht erfüllt.

Meine Kommentare waren zu pessimistisch. Aber es wird viel Unsinn aufdecken.

Getestet auf regex101.com

Übrigens könnten Sie das Klammermuster anpassen und verwenden \([^)]*\). Negierte Zeichen mit gierigem Multiplikator benötigen keine Rückreferenzierung, daher funktioniert der Vorgang schneller.

verwandte Informationen