【问题标题】:re string position list builder重新字符串位置列表生成器
【发布时间】:2013-03-09 23:30:22
【问题描述】:
所以我有一个这样的字符串:
'|item1|item2|item3|item4'
从那个字符串,我想建立一个这样的列表:
['|item1','|item1|item2','|item1|item2|item3','|item1|item2|item3|item4']
它本质上是寻找每个 '|'并从该位置返回前一个字符串。
【问题讨论】:
标签:
python
regex
string
list
expression
【解决方案1】:
无需使用正则表达式:
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
【解决方案2】:
这个问题有一个解决方案:
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
【解决方案3】:
最简单的方法:
list(itertools.accumulate(re.findall('\|\w+', '|item1|item2|item3|item4')))