2010-12-20 18 views
0

Ich habe eine GraphViz-Datei für einen bestimmten Identifikator mit Regex analysiert. Hier ist der typische Inhalt aus dieser Datei:Python Regex passendes Problem

node10 [label="second-messenger-mediated signaling\nGO:0019932", fontname=Courier, ...]; 

node11 [label="inositol phosphate-mediated signaling\nGO:0048016", fontname=Courier, ...]; 

node12 [label="activation of phospholipase C activity by G-protein coupled receptor protein signaling pathway coupled to IP3 second messenger\n\ 

GO:0007200", fontname=Courier, ...]; 

node13 [label="G-protein coupled receptor protein signaling pathway\nGO:0007186", fontname=Courier, ...]; 

node14 [label="activation of phospholipase C activity\nGO:0007202", fontname=Courier, ...]; 

node15 [label="elevation of cytosolic calcium ion concentration involved in G-protein signaling coupled to IP3 second messenger\nGO:0051482", fontname=Courier, pos="798,1162", width="9.56", height="0.50"]; 

Da ich nur daran interessiert bin in dem nodeid, Label und die GO Kennung ich die folgende regex verwendet habe, um jede Zeile zu entsprechen:

(node\d*)\s\[label=\"([\w\s-]*).*(GO:\d*) 

Ich weiß, dass es weder schrecklich elegant noch sehr effizient ist, aber es hat die Arbeit erledigt, außer für die Linie mit node12. Ich habe versucht, re.DOTALL und re.MULTILINE, aber ohne Erfolg.

Kann mir jemand helfen, das fehlende Teil des Puzzles zu erkennen, damit der Regex auch funktioniert mit node12?

** EDIT:

Hier [1] ist ein Link auf die Datei, die eine dieser Zeilen enthält.

[1] http://amigo.geneontology.org/cgi-bin/amigo/term-details.cgi?session_id=7924amigo1292519756&term=GO:0051482&format=dot

Antwort

2

wenn Sie jede Zeile übereinstimmen, dann den Knoten 12 wird in zwei Linien aufgeteilt werden ... Sie sollen die alle Datei oder iter zwischen einem Knoten lesen und einer anderen ...

+0

Sorry, ich verstehe nicht wirklich, was du sagst. Irgendwie kannst du ein bisschen klarer sein? – luuke

+0

meine schlechte, sorry;) Ich sage, dass das Problem die neue Zeile ist. im Normalfall wäre die Zeile 'node11 label [etc] \\ n; In Knoten 12 gibt es \\ n \\ n. also funktioniert die Regex nicht. Sie können tun: – Ant

+0

q = öffnen ('Datei') .read(). ersetzen ('\\ n \\ n', '\\ n') ... jetzt Ihre Regex wird funktionieren;) – Ant

1

Ist \ nach der ersten Zeile von node12 endet die Linie zu entkommen?

+0

Ich habe gerade einen Link zu der Datei hinzugefügt, so dass Sie es besser betrachten können. – luuke

3

Sie neu erfinden das Rad nicht.

pydot ist eine Bibliothek, die Punktdateien mit pyparsing analysiert.