【问题标题】: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')))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-20
          • 2013-08-29
          • 1970-01-01
          • 2016-04-21
          • 1970-01-01
          • 2022-01-22
          相关资源
          最近更新 更多