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\2
gibt 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(
.