2016-12-15 4 views
3

fonction split expression régulière J'utilise python2 et je veux me débarrasser de ces chaînes vides dans la sortie de l'expression régulière de python suivant:python problème

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

et la sortie est ceci:

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

Je veux juste obtenir cette sortie:

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

Répondre

2

Une façon possible:

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

Regex est probablement pas ce que vous vouloir utiliser dans ce cas. Il semble que vous voulez simplement diviser la chaîne en groupes de n (8) caractères.

Je pochés une réponse de 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

En fait, je fait un autre code similaire à cela et je n'ai pas connaître les choses en boucle dynamique encore, mais il est vraiment génial: D –

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

sur:

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

Après votre approche regex, vous pouvez simplement utiliser un filtre pour obtenir votre des sortie ired.

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

Si vous exécutez, vous devriez obtenir:

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

C'est exactement ce qui est split pour. C'est une chaîne fractionnée utilisant une expression régulière comme séparateur.

Si vous avez besoin de trouver tous les matches essayez d'utiliser findall à la place:

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