Tôi đang làm nổi lên câu trả lời thường xuyên của mình dựa trên câu trả lời mà tôi đã đăng trước đó trong phần bình luận của câu trả lời khác. Tôi nghĩ rằng sử dụng re
là một giải pháp rõ ràng rõ ràng hơn cho vấn đề này hơn str.rstrip
.
>>> import re
Nếu bạn muốn loại bỏ một hoặc nhiều trailing chars xuống dòng:
>>> re.sub(r'[\n\r]+$', '', '\nx\r\n')
'\nx'
Nếu bạn muốn xóa ký tự dòng mới ở mọi nơi (không chỉ theo dõi):
>>> re.sub(r'[\n\r]+', '', '\nx\r\n')
'x'
Nếu bạn muốn loại bỏ chỉ 1-2 ký tự ký tự dòng mới (ví dụ \r
, \n
, \r\n
, \n\r
, \r\r
, \n\n
)
>>> re.sub(r'[\n\r]{1,2}$', '', '\nx\r\n\r\n')
'\nx\r'
>>> re.sub(r'[\n\r]{1,2}$', '', '\nx\r\n\r')
'\nx\r'
>>> re.sub(r'[\n\r]{1,2}$', '', '\nx\r\n')
'\nx'
Tôi có cảm giác rằng hầu hết mọi người thực sự muốn ở đây, là loại bỏ chỉ một lần xuất hiện của một nhân vật dòng mới, hoặc \r\n
hoặc \n
không có gì nữa.
>>> re.sub(r'(?:\r\n|\n)$', '', '\nx\n\n', count=1)
'\nx\n'
>>> re.sub(r'(?:\r\n|\n)$', '', '\nx\r\n\r\n', count=1)
'\nx\r\n'
>>> re.sub(r'(?:\r\n|\n)$', '', '\nx\r\n', count=1)
'\nx'
>>> re.sub(r'(?:\r\n|\n)$', '', '\nx\n', count=1)
'\nx'
(Việc ?:
tạo một nhóm không bắt giữ.)
(Bằng cách này là không gì '...'.rstrip('\n', '').rstrip('\r', '')
không mà có thể không được rõ ràng cho người khác vấp ngã khi chủ đề này. str.rstrip
Dải như nhiều nhân vật trailing càng tốt, do đó, một chuỗi như foo\n\n\n
sẽ cho kết quả dương tính giả của foo
trong khi bạn có thể đã muốn giữ gìn các dòng mới khác sau khi tước một dấu duy nhất.)