Python正则表达式匹配问题

时间:2010-12-20 22:18:41

标签: python regex

我一直在使用Regex解析特定标识符的GraphViz文件。以下是此文件的典型内容:

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"];

由于我只对 nodeid 标签 GO标识符感兴趣,因此我使用以下正则表达式来匹配每一行:< / p>

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

我知道它既不是非常优雅也不是非常高效,但它完成了工作,除了 node12 的行。我尝试过使用re.DOTALL和re.MULTILINE,但无济于事。

任何人都可以帮助我发现拼图的缺失部分,使正则表达式也适用于 node12 吗?

**编辑:

此处[1]是指向包含其中一行的文件的链接。

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

3 个答案:

答案 0 :(得分:3)

不要重新发明轮子。

pydot是一个使用pyparsing解析点文件的库。

答案 1 :(得分:2)

如果你匹配每一行,那么节点12将被分成两行...你应该读取一个节点和另一个节点之间的所有文件或者它...

答案 2 :(得分:1)

node12的第一行之后的\是否会逃避该行的结束?