2008-12-17 13 views
11

Je souhaite diviser une chaîne en utilisant un ou plusieurs caractères séparateurs.Chaîne fractionnée sur un certain nombre de caractères différents

E.g. "a b.c", scindé "" et "." donnerait la liste ["a", "b", "c"]. À l'heure actuelle, je ne vois rien dans la bibliothèque standard pour ce faire, et mes propres tentatives sont un peu maladroites. Par exemple.

def my_split(string, split_chars): 
    if isinstance(string_L, basestring): 
     string_L = [string_L] 
    try: 
     split_char = split_chars[0] 
    except IndexError: 
     return string_L 

    res = [] 
    for s in string_L: 
     res.extend(s.split(split_char)) 
    return my_split(res, split_chars[1:]) 

print my_split("a b.c", [' ', '.']) 

Horrible! De meilleures suggestions?

+0

est que "un bc" (un espace b point c)? Avez-vous plus de données d'entrée? – OscarRyz

+0

Oui, c'est vrai. J'ai mis à jour la question pour être un peu plus clair –

Répondre

37
>>> import re 
>>> re.split('[ .]', 'a b.c') 
['a', 'b', 'c'] 
+0

Et rappelez-vous, que les caractères doivent être entre crochets []. J'ai oublié à ce sujet et perdu au moins 20 minutes. Avec les parenthèses 'split()' se scinde selon la chaîne entière. – noisy

2

Celui-ci remplace tous les séparateurs avec le premier séparateur de la liste, puis "se sépare" en utilisant ce caractère.

def split(string, divs): 
    for d in divs[1:]: 
     string = string.replace(d, divs[0]) 
    return string.split(divs[0]) 

sortie:

>>> split("a b.c", " .") 
['a', 'b', 'c'] 

>>> split("a b.c", ".") 
['a b', 'c'] 

Je aime cette solution 're' bien.

1

Pas très rapide, mais fait le travail:

def my_split(text, seps): 
    for sep in seps: 
    text = text.replace(sep, seps[0]) 
    return text.split(seps[0]) 
Questions connexes