【问题标题】:Possible occurrences of splitting a string by delimiter通过分隔符拆分字符串的可能情况
【发布时间】:2019-07-09 22:20:25
【问题描述】:

我有一个字符串:str = "**Quote_Policy_Generalparty_NameInfo** "

我将字符串拆分为str.split("_"),这给了我一个 python 列表。

对于获得如下输出的任何帮助表示赞赏。

[ Quote, Quote_Policy, Quote_Policy_Generalparty, Quote_Policy_Generalparty_NameInfo ]

【问题讨论】:

    标签: python string list split permutation


    【解决方案1】:

    您可以使用range(len(list)) 创建切片list[:1]list[:2] 等,然后使用"_".join(...) 连接每个切片

    text = "Quote_Policy_Generalparty_NameInfo "
    data = text.split('_')
    
    result = []
    
    for x in range(len(data)):
        part = data[:x+1]
        part = "_".join(part)
        result.append(part)
    
    print(result)
    

    【讨论】:

      【解决方案2】:
      input = "Quote_Policy_Generalparty_NameInfo"
      tokenized = input.split("_")
      combined = [
          "_".join(tokenized[:i])
          for i, token in enumerate(tokenized, 1)
      ]
      

      上面combined的值将是

      ['Quote', 'Quote_Policy', 'Quote_Policy_Generalparty', 'Quote_Policy_Generalparty_NameInfo']
      

      【讨论】:

        【解决方案3】:

        你可以使用itertools中的accumulate,我们基本上给它一个参数,它决定如何累积两个元素

        from itertools import accumulate
        input = "Quote_Policy_Generalparty_NameInfo"
        output = [*accumulate(input.split('_'), lambda str1, str2 : '_'.join([str1,str2])),]
        

        给出:

        Out[11]: 
        ['Quote',
         'Quote_Policy',
         'Quote_Policy_Generalparty',
         'Quote_Policy_Generalparty_NameInfo']
        

        【讨论】:

          【解决方案4】:

          如果你觉得上面的答案过于干净和令人满意,你也可以考虑正则表达式:

          >>> import regex as re  # For `overlapped` support
          >>> x = "Quote_Policy_Generalparty_NameInfo"
          >>> list(map(lambda s: s[::-1], re.findall('(?<=_).*$', '_' + x[::-1], overlapped=True)))
          ['Quote_Policy_Generalparty_NameInfo', 'Quote_Policy_Generalparty', 'Quote_Policy', 'Quote']
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-03-02
            • 1970-01-01
            • 2013-10-30
            • 2013-03-03
            • 2018-05-05
            • 2011-03-29
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多