2008-12-17 16 views
11

Me gustaría dividir una cadena utilizando uno o más caracteres separadores.dividir cadena en una serie de caracteres diferentes

E.g. "a b.c", dividido en "" y "." daría la lista ["a", "b", "c"].

Por el momento, no puedo ver nada en la biblioteca estándar para hacer esto, y mis propios intentos son un poco torpes. P.ej.

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! ¿Alguna mejor sugerencia?

+0

es que "a bc" (un espacio b del punto C)? ¿Tiene más entrada de muestra? – OscarRyz

+0

Sí, eso es correcto. He actualizado la pregunta para que sea un poco más clara –

Respuesta

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

Y recuerde, los caracteres tienen que estar en paréntesis de squere []. Me olvidé de eso y perdí al menos 20 minutos. Con los paréntesis 'split()' se divide según la cadena completa. – noisy

2

Éste reemplaza todos los separadores con el primer separador en la lista, y luego "divide" usando ese carácter.

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

de salida:

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

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

me gusta esa solución 're' sin embargo.

1

No es muy rápido, pero hace el trabajo:

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