Как разбить строку на список с учетом отрицательных чисел? - PullRequest
3 голосов
/ 20 ноября 2011

Я хочу разбить строку вроде:

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

в список, подобный этому:

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

Все нецифровые элементы полностью разделяются, если элемент после«-» состоит из цифр, затем он должен объединиться с «-» и стать отрицательным числом.

Ответы [ 2 ]

6 голосов
/ 20 ноября 2011
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 голос
/ 20 ноября 2011

Решение без регулярных выражений, которое делает его длиннее, но быстрее для больших наборов данных:

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