2016-12-15 238 views
3

我使用python2,我想在下面的蟒蛇正則表達式的輸出來擺脫這些空字符串:蟒蛇正則表達式分割功能問題

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

和輸出是這樣的:

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

我只想得到這個輸出:

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

回答

2

一種可能的方式:

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

正則表達式可能是不是你想在這種情況下使用。您似乎只想將字符串拆分爲(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'] 
+0

我曾作過類似的另一種代碼這一點,我也沒搞懂動態循環的東西還沒有,但它是真的真棒:D –

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

出來:

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

按照你的正則表達式的方法,你可以簡單地使用過濾以獲得你的des所需輸出。

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

如果你運行它,你應該得到:

['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 != ''])