Estoy aumentando mi respuesta basada en expresiones regulares de una que publiqué anteriormente en los comentarios de otra respuesta. Creo que usar re
es una solución más clara y explícita para este problema que str.rstrip
.
>>> import re
Si desea eliminar uno o más caracteres de nueva línea finales :
>>> re.sub(r'[\n\r]+$', '', '\nx\r\n')
'\nx'
Si desea eliminar caracteres de nueva línea en todas partes (no solo al final):
>>> re.sub(r'[\n\r]+', '', '\nx\r\n')
'x'
Si desea eliminar sólo 1-2 caracteres salto de línea final (es decir, \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'
Tengo la sensación de que lo que la mayoría de la gente realmente quiere aquí es eliminar solo una ocurrencia de un personaje de nueva línea final, ya sea \r\n
o \n
nada más.
>>> 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'
(Los ?:
objetivo es crear un grupo sin captura).
(Por cierto, esto no es lo '...'.rstrip('\n', '').rstrip('\r', '')
que no está claro para otros que se topan con este hilo. str.rstrip
Quita la mayor cantidad posible de caracteres finales, por lo que una cadena como foo\n\n\n
resultaría en un falso positivo foo
mientras que es posible que haya querido preservar el otras líneas nuevas después de quitar una sola final).