python拆分一个至少有2个空格的字符串

时间:2012-10-12 20:28:59

标签: python split python-2.7

我想在只有至少两个或更多空格的地方拆分字符串。

例如

str = '10DEUTSCH        GGS Neue Heide 25-27     Wahn-Heide   -1      -1'
print str.split()

结果:

['10DEUTSCH', 'GGS', 'Neue', 'Heide', '25-27', 'Wahn-Heide', '-1', '-1']

我希望它看起来像这样:

['10DEUTSCH', 'GGS Neue Heide 25-27', 'Wahn-Heide', '-1', '-1']

4 个答案:

答案 0 :(得分:46)

In [4]: import re    
In [5]: text = '10DEUTSCH        GGS Neue Heide 25-27     Wahn-Heide   -1      -1'
In [7]: re.split(r'\s{2,}', text)
Out[7]: ['10DEUTSCH', 'GGS Neue Heide 25-27', 'Wahn-Heide', '-1', '-1']

答案 1 :(得分:8)

正如已经指出的,str不是你的字符串的好名字,所以改为使用words

output = [s.strip() for s in words.split('  ') if s]

.split('') - 带有两个空格 - 将为您提供一个包含空字符串的列表,以及包含尾部/前导空格的项目。列表推导迭代该列表,保留任何非空白项(if s),而.strip()负责任何前导/尾随空格。

答案 2 :(得分:5)

In [30]: strs='10DEUTSCH        GGS Neue Heide 25-27     Wahn-Heide   -1      -1'

In [38]: filter(None, strs.split("  "))

Out[38]: ['10DEUTSCH', 'GGS Neue Heide 25-27', ' Wahn-Heide', ' -1', '-1']

In [32]: map(str.strip, filter(None, strs.split("  ")))

Out[32]: ['10DEUTSCH', 'GGS Neue Heide 25-27', 'Wahn-Heide', '-1', '-1']

答案 3 :(得分:1)

在以下情况下:

  • 混合的制表符和空格
  • 在字符串的开头和/或结尾处空白

(最初回答Split string at whitespace longer than a single space and tab characters, Python

我将使用正则表达式拆分:2个或更多空格,然后过滤掉re.split产生的空字符串:

import re

s = '        1. 1. 2.     1 \tNote#EvE\t \t1\t \tE3\t \t  64\t        1. 3. 2. 120 \n'

result = [x for x in re.split("\s{2,}",s) if x]

print(result)

打印:

['1. 1. 2.', '1', 'Note#EvE', '1', 'E3', '64', '1. 3. 2. 120']

这不会保留开头/结尾的空格,但是已经很接近了。