如何在python中使用具有不同数量的空格的正则表达式

时间:2014-02-06 21:55:32

标签: python regex

我正在尝试重新格式化我的数据:

  

GI | 492845765 | REF | WP_005999719.1 | DNA甲基转移酶[[Eubacterium] infirmum]

  

[[真杆菌] infirmum] GI | 492845765 |

也就是说,我只想保留gi编号和有机体名称(有机体名称在gi编号前面),并删除“额外”信息(在这种情况下,参考编号和“ DNA甲基转移酶“)。

  

我会做re.sub(r“(\ w + | \ w + |)\ w + | \ w_ \ w | \ s \ w + \ s \ w \ s([。]),\ 2 \ 1,线)

(或类似的东西)

但是,我的数据的其他一些行在“额外”信息中有两个以上的单词。 例如:

  

GI | 548229945 | REF | WP_022448665.1 | dNA(胞嘧啶-5 - ) - 甲基转移酶[Roseburia sp。 CAG:303]

我如何编写正则表达式来重命名我的所有数据,以便生物体名称在前面,gi数字在下面,其他一切都被删除了?

1 个答案:

答案 0 :(得分:2)

这可能就是你所要求的:

(\w+\|\d+\|)(?:.*\s)(\[\S*)(?:\s)(.+\])

使用\2\3\1作为替换模式,$2$3$1似乎也一样。

re.sub(r'(\w+\|\d+\|)(?:.*\s)(\[\S*)(?:\s)(.+\])', \2\3\1, line)

示例:http://regex101.com/r/aP6lB9