Sto ribollendo la mia risposta basata sull'espressione regolare da una che ho pubblicato in precedenza nei commenti di un'altra risposta. Penso che l'utilizzo re
sia una soluzione più chiara a questo problema rispetto a str.rstrip
.
>>> import re
Se si desidera rimuovere uno o più caratteri newline finali :
>>> re.sub(r'[\n\r]+$', '', '\nx\r\n')
'\nx'
Se vuoi rimuovere i caratteri newline ovunque (non solo in coda):
>>> re.sub(r'[\n\r]+', '', '\nx\r\n')
'x'
Se si desidera rimuovere solo 1-2 trascinamento caratteri di nuova linea (cioè \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'
Ho la sensazione che ciò che la maggior parte della gente vuole davvero qui, è di rimuovere solo una ricorrenza di un personaggio newline finale, o \r\n
o \n
e niente di più.
>>> 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'
(Il ?:
per creare un gruppo non di acquisizione.)
(A proposito, questo non è ciò '...'.rstrip('\n', '').rstrip('\r', '')
che potrebbe non essere chiaro agli altri inciampare su questo thread. str.rstrip
Spoglia il maggior numero possibile di caratteri finali, quindi una stringa simile foo\n\n\n
comporterebbe un falso positivo di foo
mentre potresti aver voluto preservare il altre nuove righe dopo aver rimosso una singola traccia.)