如何将这些字符串拆分为字符串数组?

时间:2012-02-23 07:57:41

标签: python

我有几个字符串,其中的短语或单词由多个空格分隔。

c1 = "St. Louis       12             Cardinals"
c2 = "Boston          16             Red Sox"
c3 = "New York        13             Yankees"

如何使用python split(" ")函数编写一个函数来将每一行分成一个字符串数组?例如,c1将转到['St. Louis', '12', 'Cardinals']

调用split(" ")然后修剪组件实体将无法正常工作,因为某些实体(例如St. Louis或Red Sox)中有空格。

但是,我知道所有实体至少相隔2个空格,并且没有实体在其中有2个空格。顺便说一句,我实际上有大约100个城市要处理,而不是3.谢谢!

5 个答案:

答案 0 :(得分:4)

没有正则表达式:

c1 = "St. Louis       12             Cardinals"
words = [w.strip() for w in c1.split('  ') if w]
# words == ['St. Louis', '12', 'Cardinals']

答案 1 :(得分:3)

import re
re.split(r' {2,}', c1)
re.split(r' {2,}', c2)
re.split(r' {2,}', c3)

答案 2 :(得分:2)

您可以使用正则表达式执行此操作:

import re

blahRegex = re.compile(r'(.*?)\s+(\d+)\s+(.*?)')

for line in open('filename','ro').readlines():
    m = blahRegex.match(line)
    if m is not None:
         city = m.group(1)
         rank = m.group(2)
         team = m.group(3)

有很多方法可以让那只猫去皮肤,你可以使用named groups,或者使你的正则表达更加紧密..但是,这应该可以做到。

答案 3 :(得分:2)

您可以使用re.split

>>> re.split('\s{2,}','St. Louis       12             Cardinals')
['St. Louis', '12', 'Cardinals']

答案 4 :(得分:2)

看起来内容是固定宽度的。如果情况总是这样,假设它们是空格而不是制表符,那么你总是可以使用切片来反转它:

split_fields = lambda s: [s[:16].strip(), s[16:31:].strip(), s[31:].strip()]

或:

def split_fields(s):
    return [s[:16].strip(), s[16:31:].strip(), s[31:].strip()]

使用示例:

>>> split_fields(c1)
['St. Louis', '12', 'Cardinals']
>>> split_fields(c2)
['Boston', '16', 'Red Sox']
>>> split_fields(c3)
['New York', '13', 'Yankees']