0

所以我有一个这样的字符串:

'|item1|item2|item3|item4'

从那个字符串,我想建立一个这样的列表:

['|item1','|item1|item2','|item1|item2|item3','|item1|item2|item3|item4']

它基本上寻找每个'|' 并从该位置返回前一个字符串。

4

3 回答 3

2

无需使用正则表达式:

stack = []
result = []
for elem in inputstring.split('|'):
    if not elem: continue
    stack.append(elem)
    result.append('|' + '|'.join(stack))

产生:

>>> result
['|item1', '|item1|item2', '|item1|item2|item3', '|item1|item2|item3|item4']

您也可以使用生成器来执行此操作:

def generate_items(inputstring):
    stack = []
    for elem in inputstring.split('|'):
        if not elem: continue
        stack.append(elem)
        yield '|' + '|'.join(stack)

for item in generate_items(inputstring):
    print item
于 2013-03-09T23:32:30.370 回答
1

这个问题有一个列表解决方案:

out = []
for piece in items[1:].split('|'):
    out.append((out[-1] if len(out) else '') + '|' + piece)

如果你喜欢生成器:

def generate_items(inputstring):
    curr = ''
    for item in inputstring[1:].split('|'):
        curr += '|' + item 
        yield curr
于 2013-03-09T23:46:31.653 回答
1

最简单的方法:

list(itertools.accumulate(re.findall('\|\w+', '|item1|item2|item3|item4')))
于 2013-03-09T23:54:45.443 回答