Je bouillonne ma réponse basée sur l'expression régulière de celle que j'ai publiée plus tôt dans les commentaires d'une autre réponse. Je pense que l'utilisation re
est une solution plus claire et explicite à ce problème que str.rstrip
.
>>> import re
Si vous souhaitez supprimer un ou plusieurs caractères de fin de ligne:
>>> re.sub(r'[\n\r]+$', '', '\nx\r\n')
'\nx'
Si vous souhaitez supprimer les caractères de nouvelle ligne partout (pas seulement à la fin):
>>> re.sub(r'[\n\r]+', '', '\nx\r\n')
'x'
Si vous voulez supprimer seulement 1-2 caractères de nouvelle ligne de fuite (c. -à- \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'
J'ai l'impression que la plupart des gens veulent vraiment ici, c'est supprimer une seule occurrence d'un caractère de fin de ligne, soit \r\n
ou \n
et rien de plus.
>>> 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'
(Le ?:
s'agit de créer un groupe non capturant.)
(Soit dit en passant, ce n'est pas ce '...'.rstrip('\n', '').rstrip('\r', '')
qui ne peut être clair pour les autres qui tombent sur ce fil. str.rstrip
Supprime autant de caractères de fin que possible, donc une chaîne comme foo\n\n\n
cela entraînerait un faux positif foo
alors que vous souhaitiez peut-être conserver le d'autres sauts de ligne après en avoir retiré un.)