Estou borbulhando minha resposta com base em expressões regulares de uma que eu postei anteriormente nos comentários de outra resposta. Eu acho que usar re
é uma solução mais clara e explícita para esse problema do que str.rstrip
.
>>> import re
Se você deseja remover um ou mais caracteres de nova linha à direita :
>>> re.sub(r'[\n\r]+$', '', '\nx\r\n')
'\nx'
Se você deseja remover os caracteres de nova linha em qualquer lugar (não apenas à direita):
>>> re.sub(r'[\n\r]+', '', '\nx\r\n')
'x'
Se você quiser remover apenas 1-2 caracteres final de linha (ou seja, \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'
Sinto que o que a maioria das pessoas realmente deseja aqui é remover apenas uma ocorrência de um caractere de nova linha à direita, um \r\n
ou \n
mais nada.
>>> 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'
(O ?:
objetivo é criar um grupo que não seja de captura.)
(A propósito, isso não é o que '...'.rstrip('\n', '').rstrip('\r', '')
faz, o que pode não estar claro para os outros que se deparam com esse encadeamento. str.rstrip
Retira o máximo possível de caracteres finais; portanto, um encadeamento semelhante foo\n\n\n
resultaria em um falso positivo, foo
enquanto você pode querer preservar o outras linhas novas após remover uma única linha à direita.)