Почему strip() не удаляет пробельные символы?

Метод strip() почему-то не удаляет символы перевода строки '\n'.

import requests
from bs4 import BeautifulSoup
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
           ' (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
           }
url = 'https://app.superboss9.com/api/v1/pages/good_start?ln=en&location=eu'
res = requests.get(url, headers=headers)
d = res.json()["data"]
txt1 = d["title"] + d["content"]
print(type(txt1))  # <class 'str'>
soup = BeautifulSoup(txt1, 'html.parser')
li = []
for el in soup.h3.next_siblings:
    s = el.text
    s = s.strip('\n')
    li.append(s)
    print(repr(s))

Если написать strip(''), то есть без указания параметра, то он работает и удаляет все пробельные символы. Консоль


Ответы (2 шт):

Автор решения: Иван Исаков

Метод strip() удаляет только начальные и конечные символы в строке. При этом количество символов не важно - удалит все.

Как вариант, можно перечислить все необходимые символы для удаления в качестве аргумента, но опять же удалит только то, что находится в начале и в конце строки :

s.strip('\n\r\t')

Если хотите убрать символ внутри строки воспользуйтесь replace():

s.replace('\n', '')
→ Ссылка
Автор решения: Алексей Р

Метод str.strip() без аргумента удаляет ведущие и завершающие символы, соответствующие string.whitespace:

import string

for c in string.whitespace:
    print(f'{ascii(c):<6}, код {ord(c):02d}')
' '   , код 32
'\t'  , код 09
'\n'  , код 10
'\r'  , код 13
'\x0b', код 11
'\x0c', код 12

Когда str.strip() встречает в строке символ, который отсутствует в заданной последовательности на удаление, он прекращает дальнейшую чистку с той стороны, где встретился такой символ.

Так, например, есть строка \r\n\t+\r.

Вариант вызова .strip() видит символы \r слева и справа - они есть в string.whitespace - удаляет. Далее видит \n слева и + справа. \n есть в string.whitespace - удаляет. + нет, поэтому справа больше чистить нечего. Затем \t слева - удалить. И снова видит + слева, дальше не идет.
Вариант вызова .strip('\n') для чистки оперирует только символом \n. Он видит символы \r слева и справа - их нет в аргументе и метод завершает работу, так и не добравшись до \n.

Дополнительно. Существуют еще методы .lstrip() и .rstrip(), которые чистят строку только слева и только справа соответственно.

→ Ссылка