2011-11-20 38 views
3

我要像一个字符串分割:如何将字符串拆分为列表,并考虑负数?

strg = "22+11-aa+bb-44-" 

到像这样的列表:

my_list = ['22', '+','11', '-', 'aa', '+', 'bb', '-44', '-'] 

所有非数字元素总共被划分出来,如果以后的元素“ - ”由的数字,那么它应该与' - '连接在一起并成为负数。

+3

有某些原因'11'不在输出中? –

回答

1

没有regexs,使得它更长的时间,但速度更快的大型数据集的解决方案:

strg="22+11-aa+bb-44-" 
arr=[] 
i=0 
for j in range(len(strg)): 
     if strg[j] in '+-': 
      arr.append(strg[i:j]) 
      if strg[j]=='-' and strg[min(j+1,len(strg)-1)].isdigit(): 
       i=j 
      else: 
       arr.append(strg[j]) 
       i=j+1 
print arr 

结果:

['22', '+', '11', '-', 'aa', '+', 'bb', '-44', '-'] 
6
import re 

strg = "22+11-aa+bb-44+-zz99+-33-" 
print re.findall(r'-?\d+|[a-z]+|\W+?', strg) 

结果:

['22', '+', '11', '-', 'aa', '+', 'bb', '-44', '+', '-', 'zz', '99', '+', '-33', '-'] 
相关问题