Mam na uwadze moją odpowiedź opartą na wyrażeniach regularnych z tej, którą zamieściłem wcześniej w komentarzach do innej odpowiedzi. Myślę, że używanie re
jest wyraźniejszym i bardziej wyraźnym rozwiązaniem tego problemu niż str.rstrip
.
>>> import re
Jeśli chcesz usunąć jeden lub więcej końcowych znaków nowego wiersza:
>>> re.sub(r'[\n\r]+$', '', '\nx\r\n')
'\nx'
Jeśli chcesz wszędzie usuwać znaki nowego wiersza (nie tylko końcowe):
>>> re.sub(r'[\n\r]+', '', '\nx\r\n')
'x'
Jeśli chcesz usunąć tylko 1-2 doczepiany znaki nowej linii (czyli \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'
Mam uczucie, co większość ludzi naprawdę chcesz tu jest usunięcie tylko jedno wystąpienie znaku nowej linii spływu, albo \r\n
albo \n
i nic więcej.
>>> 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'
(Ma ?:
to na celu utworzenie grupy nie przechwytywania).
(Nawiasem mówiąc, to nie jest to '...'.rstrip('\n', '').rstrip('\r', '')
, co może nie być jasne dla innych, którzy natkną się na ten wątek. str.rstrip
Usuwa tyle znaków, ile to możliwe, więc ciąg taki foo\n\n\n
dałby fałszywy wynik pozytywny, foo
podczas gdy być może chciałbyś zachować inne znaki nowej linii po usunięciu jednego końcowego).