2011-01-30 29 views
7

Tôi có chuỗi đầu vào như sau: a1b2c30d40 và tôi muốn mã hóa chuỗi thành: a, 1, b, 2, c, 30, d, 40.tách chuỗi python

Tôi biết tôi có thể đọc từng nhân vật một và theo dõi ký tự trước để xác định xem tôi có nên mã hóa hay không (2 chữ số trong hàng có nghĩa là không mã hóa nó) nhưng lại có cách khác làm điều này?

Trả lời

13
>>> re.split(r'(\d+)', 'a1b2c30d40') 
['a', '1', 'b', '2', 'c', '30', 'd', '40', ''] 

Trên mẫu: như những nhận xét nói, \d có nghĩa là "trận đấu một chữ số", + là một modifier có nghĩa là "phù hợp với một hoặc nhiều", do đó \d+ có nghĩa là "trận đấu càng nhiều chữ số càng tốt". Điều này được đưa vào một nhóm (), do đó, toàn bộ mẫu trong ngữ cảnh re.split có nghĩa là "chia chuỗi này bằng cách sử dụng càng nhiều chữ số càng tốt với dấu phân tách, bổ sung thêm dấu phân tách phù hợp vào kết quả". Nếu bạn bỏ qua nhóm, bạn sẽ nhận được ['a', 'b', 'c', 'd', ''].

+0

Umm Tôi không hiểu rõ regex. Bạn có nhớ đưa ra một số giải thích về mẫu (\ d +) không? – Hery

+1

Nó chia nhỏ số/chữ số liên tiếp ('\ d' là 0-9,' + 'là một hoặc nhiều chữ số). – delnan

+1

http://docs.python.org/library/re.html – Samizdis