2008-12-17 22 views
11

Bir veya daha fazla ayırıcı karakter kullanarak bir dizeyi ayırmak istiyorum.Bir dizi farklı karaktere bölünmüş dize

E.g. "a.c", "" ve "" üzerine bölün. ["a", "b", "c"] listesini verir.

Şu an bunu yapmak için standart kitaplıkta hiçbir şey göremiyorum ve kendi girişimlerim biraz beceriksiz. Örneğin.

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! Daha iyi bir öneri?

+0

olduğunu olduğunu "bir bc" (boşluk b nokta c)? Daha fazla örnek girdiniz var mı? – OscarRyz

+0

Evet, doğru. Soruyu daha net bir şekilde güncelledim. –

cevap

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

Ve unutmayın, bu karakterlerin squere köşeli parantez içinde olması gerekir []. Bunu unuttum ve en az 20 dakika kaybettim. Ayraçlar ile 'split() 'tüm dizgeye göre ayrılır. – noisy

2

Bu, listedeki ilk ayırıcıyı içeren tüm ayırıcıların yerini alır ve sonra bu karakteri kullanarak "ayırır".

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

çıkışı:

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

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

Ben gerçi 're' çözüm gibi yapın.

1

çok hızlı ama iş yapar değil: re olmadan

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