如何将含有负数的字符串拆分成列表?

3

I want to split a string like:

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

将其转换为以下列表形式:
my_list = ['22', '+','11', '-', 'aa', '+', 'bb', '-44', '-']

所有非数字元素都被完全分离出来,如果“-”后面的元素由数字组成,则应该与“-”连接在一起并变成负数。


3
为什么输出中没有数字11 - Marcelo Cantos
2个回答

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', '-']

1
一个没有正则表达式的解决方案,虽然更长但在大数据集上更快:
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', '-']

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接