如何在python中替换字符串中的连续空格

时间:2014-11-25 12:16:47

标签: python

我有一个格式很好的数据文件,其数据结构如下:

" id1    id2             id3         id4"
"  id1    id2            id3         id4"
" id1     id2             id3         id4"

我应该在每一行中检索id2和id4,但是id之间每行中的空格数不同。有没有办法我可以用'/ t'之类的字符替换每一行中的所有连续空格,这样我就可以在每一行中检索第二和第四项? 我感谢任何帮助。

6 个答案:

答案 0 :(得分:8)

最简单的方法是执行.split()自动拆分任意数量的空白字符并忽略前导和尾随空格:

>>> s = " id1    id2             id3         id4"
>>> items = s.split()
>>> items
['id1', 'id2', 'id3', 'id4']

这样,您就可以直接访问items[1]items[3]。如果要将它们重建为以制表符分隔的字符串,请使用.join()

>>> "\t".join(items)
'id1\tid2\tid3\tid4'

答案 1 :(得分:3)

使用re.sub

>>> import re
>>> s = " id1    id2             id3         id4"
>>> re.sub('\s+',' ',s.strip())
'id1 id2 id3 id4'

你可以使用分割和切片:

>>> s = " id1    id2             id3         id4"
>>> s.split()[1::2]
['id2', 'id4']

使用re.findall:

>>> s = " id1    id2             id3         id4"
>>> re.findall('id[24]',s)
['id2', 'id4']

答案 2 :(得分:1)

您只需要拆分以获取元素:

s = " id1    id2             id3         id4"
frst,sec,th,frth = s.split()
print(sec,frth)
id2 id4

答案 3 :(得分:1)

>>> s = " id1    id2             id3         id4"
>>> s.split()
['id1', 'id2', 'id3', 'id4']
>>> '\t'.join(s.split())
'id1\tid2\tid3\tid4'
>>> print '\t'.join(s.split())
id1     id2     id3     id4

要提取id2id4,请使用str.split

进行索引编制
>>> a, b = s.split()[1], s.split()[3]
>>> a, b
('id2', 'id4')

答案 4 :(得分:1)

import re
re.sub(' +', ' ', string)

答案 5 :(得分:0)

这不是最优雅的方式,但很容易理解。此函数用一个空格替换连续的空格。

def remove_extra_spaces(s):
    s_res = ""
    flip = False
    for c in s:
        if c == ' ':
            # first one is ok, next ones not
            if not flip:
                s_res += c
            flip = True
        else:
            flip = False
            s_res += c

    return s_res