Я поднимаю свой ответ на основе регулярных выражений от ответа, который я разместил ранее в комментариях к другому ответу. Я думаю, что использование 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
, тогда как вы, возможно, захотите сохранить другие новые строки после удаления одного завершающего.)