我正在从我之前在另一个答案的 cmets 中发布的一个基于正则表达式的答案中冒泡。我认为使用re 比str.rstrip 更清楚更明确地解决了这个问题。
>>> import re
如果您想删除一个或多个尾随换行符:
>>> re.sub(r'[\n\r]+$', '', '\nx\r\n')
'\nx'
如果您想在各处删除换行符(不仅仅是尾随):
>>> re.sub(r'[\n\r]+', '', '\nx\r\n')
'x'
如果您只想删除 1-2 个尾随换行符(即\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'
我有一种感觉,大多数人在这里真正想要的,就是删除 一个 出现的尾随换行符,\r\n 或 \n,仅此而已。
>>> 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'
(?:是创建非捕获组。)
(顺便说一句,这 不是 '...'.rstrip('\n', '').rstrip('\r', '') 所做的事情,这对于其他偶然发现此线程的人来说可能不清楚。str.rstrip 尽可能多地去除尾随字符,所以一个字符串像foo\n\n\n 这样会导致foo 的误报,而您可能希望在去除单个尾随换行符后保留其他换行符。)