Python正则表达式分割函数问题

3

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

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

输出结果如下:
['', '01010100', '', '01101000', '', '01100001', '']

我只想获得这个输出:
['01010100', '01101000', '01100001']
6个回答

4

在这种情况下,正则表达式可能不是你想要使用的。看起来你只是想将字符串分成n(8)个字符一组。

我从这个问题中借鉴了一个答案。

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 - Ahmed Ramadan

2

一种可能的方式:

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

1
import re
x = "010101000110100001100001"
l = re.split("([0-1]{8})", x)
l2 = [i for i in l if i]

输出:

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

1
这正是split的作用。它使用正则表达式作为分隔符来拆分字符串。
如果你需要找到所有匹配项,尝试使用findall代替:
import re
x = "010101000110100001100001"
print(re.findall("([0-1]{8})", x))

1
print([a for a in re.split("([0-1]{8})", x) if a != ''])

0

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

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

如果你运行这个程序,你应该会得到:
['01010100', '01101000', '01100001']

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接