Я перекидаю свою відповідь на основі регулярного виразу з однієї, яку я опублікував раніше в коментарях іншої відповіді. Я вважаю, що використання re
більш чіткого і чіткого рішення цієї проблеми, ніж str.rstrip
.
>>> import re
Якщо ви хочете видалити один або кілька відстаючи нові рядок символів:
>>> re.sub(r'[\n\r]+$', '', '\nx\r\n')
'\nx'
Якщо ви хочете видалити символи нового рядка скрізь (а не лише в кінці):
>>> re.sub(r'[\n\r]+', '', '\nx\r\n')
'x'
Якщо ви хочете видалити тільки 1-2 нових рядок символів хвостових (тобто \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'
У мене виникає відчуття, чого більшість людей насправді хочуть тут, - це видалити лише одне виникнення слідуючого нового символу, \r\n
або \n
більше, і нічого більше.
>>> 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'
(Потрібно ?:
створити групу, яка не захоплює.)
(До речі, це не те '...'.rstrip('\n', '').rstrip('\r', '')
, що може бути незрозумілим для інших, що натрапляють на цю нитку. str.rstrip
Стриває якомога більше затяжних символів, тому рядок на зразок foo\n\n\n
може призвести до помилкового позитиву, foo
тоді як ви, можливо, захотіли зберегти інші нові рядки після зняття одного останнього.)