【问题标题】:python regular expression split function issuepython正则表达式拆分函数问题
【发布时间】:2026-02-02 07:25:01
【问题描述】:

我正在使用python2,我想在以下 python 正则表达式的输出中去掉这些空字符串:

import re
x = "010101000110100001100001"
print re.split("([0-1]{8})", x)

输出是这样的:

['', '01010100', '', '01101000', '', '01100001', '']

我只想得到这个输出:

['01010100', '01101000', '01100001']

【问题讨论】:

    标签: python regex python-2.7


    【解决方案1】:

    在这种情况下,您可能不想使用正则表达式。您似乎只想将字符串拆分为 n (8) 个字符组。

    我从 this question. 偷了一个答案

    def split_every(n, s):
        return [ s[i:i+n] for i in xrange(0, len(s), n) ]
    
    split_every(8, "010101000110100001100001")
    Out[2]: ['01010100', '01101000', '01100001']
    

    【讨论】:

    • 我实际上编写了另一个类似的代码,我还没有了解动态循环的东西,但它真的很棒:D
    【解决方案2】:

    一种可能的方式:

    print filter(None, re.split("([0-1]{8})", x))
    

    【讨论】:

      【解决方案3】:
      import re
      x = "010101000110100001100001"
      l = re.split("([0-1]{8})", x)
      l2 = [i for i in l if i]
      

      出来:

      ['01010100', '01101000', '01100001']
      

      【讨论】:

        【解决方案4】:

        按照您的正则表达式方法,您可以简单地使用过滤器来获得所需的输出。

        import re
        x = "010101000110100001100001"
        unfiltered_list = re.split("([0-1]{8})", x)
        print filter(None, unfiltered_list)
        

        如果你运行它,你应该得到:

        ['01010100', '01101000', '01100001']
        

        【讨论】:

          【解决方案5】:

          这正是split 的用途。它是使用正则表达式作为分隔符的分割字符串。

          如果您需要查找所有匹配项,请尝试使用 findall:

          import re
          x = "010101000110100001100001"
          print(re.findall("([0-1]{8})", x))
          

          【讨论】:

            【解决方案6】:
            print([a for a in re.split("([0-1]{8})", x) if a != ''])
            

            【讨论】: