Löschen Sie alles in der zweiten Spalte, das nicht in Klammern steht

Löschen Sie alles in der zweiten Spalte, das nicht in Klammern steht

Ich habe eine Datei, die so aussieht:

gene ID              protein
Solyc06g062540    (Z) PYROPHOSPHATASE 3 (PTHR20889:SF0)
Solyc10g075050    ALBUMIN SUPERFAMILY (PTHR33076:SF11)
Solyc07g061760    SUBFAMILY (PTHR24177:SF35)

Die Datei ist durch Tabulatoren getrennt; zwischen der ersten Spalte (Gen-ID) und der zweiten Spalte (Proteinname) befindet sich ein Tabulator. (Der Proteinname kann Leerzeichen enthalten, aber keine Tabulatoren.) Der Proteinname enthält eine Zeichenfolge in Klammern, z. B. (PTHR33076:SF11); dies ist das ProteinAUSWEIS. Ich möchte die erste Spalte behalten und alles in der zweiten Spalte außer der Protein-ID (und den sie umgebenden Klammern) löschen. Die Ausgabe würde also folgendermaßen aussehen:

Solyc06g062540    (PTHR20889:SF0)
Solyc10g075050    (PTHR33076:SF11)
Solyc07g061760    (PTHR24177:SF35)

Wie kann ich das machen? Ich habe alle IDs in Klammern mit der Funktion „Markieren“ markiert und eingegeben, (\w+\d+:\w+\d+)um alle IDs in Klammern hervorzuheben, aber ich kann es nicht manipulieren. Als Hinweis: Einige der Proteinnamen haben andere eingeklammerte Zeichenfolgen (siehe z. B. die erste Zeile, in der der Proteinname (Z)sowie der gewünschte ID-Wert enthalten sind). Diese möchte ich nicht behalten.

Antwort1

Sie können dies mit einem Suchen und Ersetzen durch reguläre Ausdrücke tun. Drücken Sie Ctrl+ H, um das Dialogfeld „Ersetzen“ zu öffnen. Stellen Sie sicher, dass der Suchmodus aktiviert ist Regular Expression.

Finde was:

(^[^\t\r\n]+\t)[^\t\r\n]+(\(\w+\d+:\w+\d+\))[^\t\r\n]*

Ersetzen mit:

\1\2

Erklärung des Musters:

[^\t\r\n]+ist eine beliebige Zeichenfolge, die weder Tabulatoren noch Zeilenumbrüche oder Wagenrückläufe enthält. Dies sollte nur mit dem Text in einer Spalte Ihrer Datei übereinstimmen.

^[^\t\r\n]+stimmt mit dem Inhalt der ersten Spalte überein, da der Zeilenabstand ^die Übereinstimmung auf den Zeilenanfang beschränkt.

Die erste Erfassungsgruppe (^[^\t\r\n]+\t)entspricht dem Inhalt des ersten Felds und der folgenden Registerkarte.

[^\t\r\n]+(\(\w+\d+:\w+\d+\))[^\t\r\n]*stimmt mit dem Inhalt des zweiten Felds überein und stimmt nur überein, wenn der eingeklammerte Ausdruck vorhanden ist.

Die zweite Erfassungsgruppe (\(\w+\d+:\w+\d+\))entspricht dem eingeklammerten Ausdruck.

Das Ersetzungsmuster \1\2gibt die erste und zweite Erfassungsgruppe zurück. Dadurch wird der umgebende Text im zweiten Feld effektiv gelöscht, da dieser Teil der Übereinstimmung nicht in einer Erfassungsgruppe enthalten ist.

Antwort2

Wenn die (in Klammern gesetzte) Protein-ID immer das letzte in der Zeile ist (wie Sie gezeigt haben), sollte es ausreichen, nach \t.*( (oder möglicherweise \t[^\r\n]*() zu suchen und es durch zu ersetzen \t(.

verwandte Informationen