2008-12-17 50 views
11

Tôi muốn chia chuỗi bằng một hoặc nhiều ký tự phân cách.tách chuỗi trên một số ký tự khác nhau

Ví dụ: "b.c", chia nhỏ trên "" và "." sẽ cung cấp danh sách ["a", "b", "c"].

Hiện tại, tôi không thể thấy bất kỳ thứ gì trong thư viện chuẩn để thực hiện việc này và nỗ lực của chính tôi hơi vụng về. Ví dụ.

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", [' ', '.']) 

Rất tệ! Bất kỳ đề xuất tốt hơn?

+0

là "một bc" (một không gian b dot c)? Bạn có thêm đầu vào mẫu? – OscarRyz

+0

Đúng vậy. Tôi đã cập nhật câu hỏi để có một chút rõ ràng hơn –

Trả lời

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

Và hãy nhớ rằng các ký tự đó phải nằm trong ngoặc vuông []. Tôi quên mất điều đó và mất ít nhất 20 phút. Với dấu ngoặc đơn 'split()' chia tách toàn bộ chuỗi. – noisy

2

Điều này sẽ thay thế tất cả các dấu phân cách bằng dấu phân cách đầu tiên trong danh sách và sau đó "chia tách" bằng ký tự đó.

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

đầu ra:

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

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

tôi làm như thế 'lại' giải pháp mặc dù.

1

Không rất nhanh nhưng không được công việc:

def my_split(text, seps): 
    for sep in seps: 
    text = text.replace(sep, seps[0]) 
    return text.split(seps[0]) 
Các vấn đề liên quan