如何在python中使用数字,字母和空格分割字符串?

时间:2018-01-15 10:11:30

标签: python regex string split

我想将带有数字,字母和特定空格的字符串拆分为特定组件。

考虑字符串

ATLANTYS2_I          -           3103 aRNH_profile         -            121   2.7e-35  118.7   0.0   1   1   2.7e-37   5.6e-35  117.7   0.0     2   120  1342  1458  1341  1459 0.98 Gypsy      Arabidopsis thaliana_+1

现在让字符串为content[3]。我运行了命令

import re 
result = re.split(r'\s{2,}', content[3])

给了我

['ATLANTYS2_I',
 '-',
 '3103 aRNH_profile',
 '-',
 '121',
 '2.7e-35',
 '118.7',
 '0.0',
 '1',
 '1',
 '2.7e-37',
 '5.6e-35',
 '117.7',
 '0.0',
 '2',
 '120',
 '1342',
 '1458',
 '1341',
 '1459 0.98 Gypsy\tArabidopsis thaliana_+1']

我将字符串拆分了2个空格。但最后一个条目1459 0.98 Gypsy\tArabidopsis thaliana_+1仍然归为一个。 我想过将最后一个条目拆分一个空格,删除结果中的最后一个条目并将拆分添加一个空格。然而,这在我看来相当笨重。

有没有办法优雅地拆分它,以便我得到最后一个条目的以下结果  '1459','0.98', Gypsy\tArabidopsis thaliana_+1'

2 个答案:

答案 0 :(得分:1)

您可以使用替换:

\s{2,}|\t+
# either two+ whitespaces
# or at least one tabulator space

<小时/> 在Python

import re

string = "ATLANTYS2_I          -           3103 aRNH_profile         -            121   2.7e-35  118.7   0.0   1   1   2.7e-37   5.6e-35  117.7   0.0     2   120  1342  1458  1341  1459 0.98 Gypsy    Arabidopsis thaliana_+1"

rx = re.compile(r'\s{2,}|\t+')
print(rx.split(string))

哪个收益

['ATLANTYS2_I', '-', '3103 aRNH_profile', '-', '121', '2.7e-35', '118.7', '0.0', '1', '1', '2.7e-37', '5.6e-35', '117.7', '0.0', '2', '120', '1342', '1458', '1341', '1459 0.98 Gypsy', 'Arabidopsis thaliana_+1']

答案 1 :(得分:0)

您可以单独处理最后一个元素:

last_element = result.pop()  # remove last element from list
numbers, plant = last_element.split('\t')  # split on tab
result += numbers.split()  # split the first part on spaces and add it back
result.append(plant)  # add the second part back

或者您可以使用正则表达式正确分割最后一个元素