Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中使用带有不同数量空格的正则表达式_Python_Regex - Fatal编程技术网

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

如何在python中使用带有不同数量空格的正则表达式,python,regex,Python,Regex,我正在尝试在此处重新格式化数据: gi | 492845765 |参考| WP | 005999719.1 | DNA甲基转移酶[[真细菌]弱菌] 进入 [Eubacterium]infrarmum]gi | 492845765| 也就是说,我只想保留gi编号和生物体名称(生物体名称在gi编号之前),并去掉“额外”信息(在本例中,参考编号和“DNA甲基转移酶”) 我会做re.sub(r)(\w+|\w+|)\w+|\w\u\w\s\s\w\s([.]),\2\1,行) (或类似的事情) 然而,我

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

gi | 492845765 |参考| WP | 005999719.1 | DNA甲基转移酶[[真细菌]弱菌]

进入

[Eubacterium]infrarmum]gi | 492845765|

也就是说,我只想保留gi编号和生物体名称(生物体名称在gi编号之前),并去掉“额外”信息(在本例中,参考编号和“DNA甲基转移酶”)

我会做re.sub(r)(\w+|\w+|)\w+|\w\u\w\s\s\w\s([.]),\2\1,行)

(或类似的事情)

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

gi | 548229945 | ref | WP | U 022448665.1 | dNA(胞嘧啶-5-)-甲基转移酶[罗丝布里亚菌属CAG:303]


我该如何编写正则表达式来重命名所有数据,以便将生物体名称放在前面,然后将gi编号放在后面,并删除所有其他内容?

这可能会满足您的要求:

(\w+\|\d+\|)(?:.*\s)(\[\S*)(?:\s)(.+\])
使用
\2\3\1
作为替换模式,
$2$3$1
的效果似乎是一样的

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

示例:

非常感谢!我如何消除第二组括号内的空白?啊,是的-我已经更新了答案,答案应该会保留空格。:)这一个只捕获了[括号,后面没有任何内容。我尝试将([\w*)|(?:\s)|(在前括号后添加了/w*)但是它只找到第一个单词,然后在找到空格时停止。是的,很抱歉-我当时很匆忙,把它弄坏了。我已经更新了答案,虽然我认为捕获只是消除了第一个空格,所以它可能需要多一点爱。是的,它只是去掉了第一个空格。但是非常感谢!regex网站非常有用好工具,谢谢你给我看这个。