Notepad ++ Regex findet / ersetzt benachbarte IDs

2

Ich habe eine CSV-Datei, die so aussieht:

ID, term, functional category
GO:0008166,viral replication,P,
GO:0008167,sigma virus replication,P,
GO:0008168,GO:0004480,methyltransferase activity,F,
GO:0008169,C-methyltransferase activity,F,

Ich muss nur verwenden notepad++, um IDs in ihre eigene Zeile zu verschieben und das, was sich in derselben Zeile befand, nach unten zu kopieren. Im Idealfall würde die endgültige Ausgabe folgendermaßen aussehen:

ID, term, functional category
GO:0008166,viral replication,P,
GO:0008167,sigma virus replication,P,
GO:0008168,,methyltransferase activity,F,
GO:0004480,methyltransferase activity,F,
GO:0008169,C-methyltransferase activity,F,

Ich habe versucht, die Funktion zum Ersetzen zu verwenden, indem ich mithilfe von: Instanzen von IDs direkt nebeneinander gefunden (\w+:\d+),(\w+:\d+),(.*),[A-Z]und durch ersetzt habe $1,$3,$4\r$2,$3,$4.

Jedes Mal, wenn ich versuche, diese Instanzen zu "finden", notepad++wird die gesamte Liste hervorgehoben und der Befehl funktioniert nicht.

Ich bin nicht sehr erfahren damit, also wenn mir jemand helfen kann, würde ich es schätzen! Vielen Dank!

Originaldatei: http://www.geneontology.org/doc/GO.terms_alt_ids

Ich habe den Header entfernt und ihn in einen CSV umgewandelt, indem ich alle Tabulatoren durch ein Komma ersetzt habe.

kevluv93
quelle

Antworten:

1

Suchen / Ersetzen von wiederholten IDs in CSV

Der nicht vollständig optimierte, aber funktionale reguläre Ausdruck, den ich verwendete, war:

(GO:[\d]+),(GO:[\d]+)(.*)

ersetzen durch:

$1$3\n$2$3

Ausgabe geben:

ID, term, functional category
GO:0008166,viral replication,P,
GO:0008167,sigma virus replication,P,
GO:0008168,methyltransferase activity,F,
GO:0004480,methyltransferase activity,F,
GO:0008169,C-methyltransferase activity,F,

Beachten Sie, dass dies nicht das Komma in Ihrer gewünschten Ausgabe dupliziert, da ich dachte, dass dies eher ein Nebeneffekt als ein gewünschter ist.

Wenn das doppelte Komma gewünscht wird, verwenden Sie:

$1,$3\n$2$3

als Ersatz statt.

Erläuterung

(GO:[\d]+)- 1. Erfassungsgruppe, Match-Literal "GO:" gefolgt von einer oder mehreren Ziffern ( $1)

, - Match Literal Comma (verwendet, um wiederholte IDs zu erkennen / nicht wiederholte zu ignorieren)

(GO:[\d]+)- 2. Erfassungsgruppe, wie erste! ( $2)

(.*)- 3. Erfassungsgruppe, entspricht 0 oder mehr von "irgendetwas" - Abkürzung für "Rest der Zeile" hier ( $3)

$1$3\n$2$3- print id 1gefolgt von der restlichen Zeile; dann eine neue Zeile; print id 2gefolgt von der restlichen Zeile

Vorbehalt

Beachten Sie, dass für den oben genannten regulären Ausdruck die Suchoption . matches newlinedeaktiviert sein muss. Andernfalls stimmt die 3. Erfassungsgruppe zu stark überein.

Punkt entspricht Zeilenvorschub

bertieb
quelle
Vielen Dank! Ich habe das Gefühl, nah dran zu sein, habe diese Textbearbeitung langsam gelernt und bin die ganze Zeit auf Probleme gestoßen. Einen schönen Tag noch
kevluv93
Es ist mir ein Vergnügen, viel Glück und dir auch :) PS regex101 ist dein Freund für diese Art von Dingen!
Bertieb
Ich hasse es, das zu tun, obwohl ich gerade die richtige Antwort gegeben habe. Ich habe es nicht bemerkt, aber diese Funktion kopiert alles unter die Instanzen der doppelten IDs und fügt es immer wieder ein. Gibt es eine Möglichkeit, das (. *) An einer einzelnen Zeile zu beenden?
Kevluv93
@ kevluv93 Füge ein $an das Ende des Find-Abschnitts an, damit es bei EoL endet (was es bei meinen Tests getan hat, aber offensichtlich echte Tests> kleine Beispieldaten!) (GO:[\d]+),(GO:[\d]+)(.*)$. Sie können ^der Vollständigkeit ^(GO:[\d]+),(GO:[\d]+)(.*)$
halber auch vorschreiben, ob der
Ich kann diesen Befehl immer noch nicht zum Laufen bringen. Es wird weiterhin jeder Datenpunkt unter den Instanzen doppelter IDs ausgewählt.
Kevluv93