Hãy làm cho một số giả định hợp lý:
(1) Bạn thực sự muốn thay thế bất kỳ chạy của nhân vật khoảng trắng với một không gian duy nhất (một hoạt động có chiều dài 1 hoặc cao hơn).
(2) Bạn muốn có cùng một mã để làm việc với những thay đổi tối thiểu trong Python 2.X với các đối tượng unicode.
(3) Bạn không muốn mã của bạn để đảm nhận những điều không được bảo đảm trong các tài liệu
(4) Bạn muốn cùng mã để làm việc với thay đổi tối thiểu với các đối tượng Python 3.x str.
Câu trả lời hiện đang được chọn có những vấn đề này:
(a) thay đổi " " * 3
-" " * 2
tức là nó loại bỏ không gian trùng lặp nhưng không gấp ba, gấp bốn, vv không gian.[Không yêu cầu 1]
(b) thay đổi "foo\tbar\tzot"
để "foobarzot"
[thất bại yêu cầu 1]
(c) khi cho ăn một đối tượng unicode, được TypeError: translate() takes exactly one argument (2 given)
[thất bại yêu cầu 2]
(d) sử dụng string.whitespace[:-1]
[yêu cầu thất bại 3; thứ tự của các ký tự trong string.whitespace không được đảm bảo]
(e) sử dụng string.whitespace[:-1]
[yêu cầu không thành công 4; trong Python 2.X, string.whitespace là '\t\n\x0b\x0c\r '
; trong Python 3.X, nó là '\ t \ n \ r \ x0b \ x0c']
Câu trả lời " ".join(s.split())
và câu trả lời re.sub(r"\s+", " ", s)
không có những vấn đề này.
Nguồn
2009-12-14 10:09:26
Điều đó cực kỳ tốt hơn giải pháp của tôi. Tôi cũng hy vọng sẽ trở thành bất tử một ngày nào đó. –
Chà. Thật là tuyệt vời. Hoàn hảo cho những gì tôi đang làm, vì chúng là những chuỗi nhỏ. Tôi tự hỏi làm thế nào điều này sẽ thực hiện trên datasets lớn mặc dù? Nó sẽ là tuyệt vời nếu ai biết làm thế nào nó hoạt động intrinsicly :) – Alex
cảm ơn, không biết về việc sử dụng không có đối số cho chạy của khoảng trắng. Khổng lồ!! – MattoTodd