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