Chcę wyeliminować wszystkie białe znaki z łańcucha, na obu końcach i między słowami.
Mam ten kod Python:
def my_handle(self):
sentence = ' hello apple '
sentence.strip()
Ale to eliminuje tylko białe znaki po obu stronach łańcucha. Jak usunąć wszystkie białe znaki?
python
trim
removing-whitespace
co2f2e
źródło
źródło
hello apple
?helloapple
?Odpowiedzi:
Jeśli chcesz usunąć spacje początkowe i końcowe, użyj
str.strip()
:Jeśli chcesz usunąć wszystkie znaki spacji, użyj
str.replace()
:(Uwaga: usuwa to tylko „normalny” znak spacji ASCII,
' ' U+0020
ale nie powoduje żadnych innych białych znaków )Jeśli chcesz usunąć zduplikowane spacje, użyj
str.split()
:źródło
sentence.join(str_list)
, poprosisz pytona o połączenie elementów z str_list za pomocąsentence
separatora."".join(sentence.split())
jest rzeczywiście rozwiązaniem kanonicznym, skutecznie usuwającym wszystkie białe spacje, a nie tylko spacje. Mark Byers ' doskonała odpowiedź powinna prawdopodobnie zostały przyjęte w miejsce tego mniej obowiązującym odpowiedź.Aby usunąć tylko spacje, użyj
str.replace
:Aby usunąć wszystkie białe znaki (spacja, tabulator, znak nowej linii, i tak dalej), można użyć
split
wtedyjoin
:lub wyrażenie regularne:
Jeśli chcesz usunąć tylko białe znaki od początku i na końcu, możesz użyć
strip
:Możesz także użyć
lstrip
do usunięcia białych znaków tylko na początku łańcucha irstrip
do usunięcia białych znaków na końcu łańcucha.źródło
yourstr.translate(str.maketrans('', '', ' \n\t\r'))
Alternatywą jest użycie wyrażeń regularnych i dopasowanie również tych dziwnych białych znaków . Oto kilka przykładów:
Usuń WSZYSTKIE spacje w ciągu, nawet między słowami:
Usuń spacje w POCZĄTKU łańcucha:
Usuń spacje na końcu łańcucha:
Usuń spacje zarówno w POCZĄTKU, jak i KONIEC łańcucha:
Usuń TYLKO DUPLIKATOWANE spacje:
(Wszystkie przykłady działają zarówno w Pythonie 2, jak i Pythonie 3)
źródło
Białe znaki obejmują spację, tabulatory i CRLF . Tak więc możemy użyć eleganckiej i jedno liniowej funkcji struny
str.translate
:Python 3
LUB jeśli chcesz być dokładny:
Python 2
LUB jeśli chcesz być dokładny:
źródło
\xc2\xa0
ans.translate( None, string.whitespace )
produkuje tylkobuiltins.TypeError: translate() takes exactly one argument (2 given)
dla mnie. Docs mówi, że argument jest tabelą translacji, zobacz string.maketrans (). Ale patrz komentarz Amnona Harela poniżej.' hello apple'.translate(str.maketrans('', '', string.whitespace))
Uwaga: lepiej zrobić zmienną do przechowywania tabeli trans, jeśli zamierzasz to zrobić wiele razy.Do usuwania białych znaków od początku i końca użyj
strip
.źródło
MaK wskazał już na powyższą metodę „tłumacz”. Ta odmiana działa z Pythonem 3 (zobacz to pytania i odpowiedzi ).
źródło
xxx.translate( { ord(c) :None for c in string.whitespace } )
dla dokładności.Bądź ostrożny:
strip
wykonuje rstrip i lstrip (usuwa spacje początkowe i końcowe, tabulatory, powroty i kanały informacyjne, ale nie usuwa ich na środku łańcucha).Jeśli zamienisz tylko spacje i tabulatory, możesz uzyskać ukryte listy CRLF, które wydają się pasować do tego, czego szukasz, ale nie są takie same.
źródło
źródło
Ponadto pasek ma kilka odmian:
Usuń spacje w POCZĄTKU i KONIEC łańcucha:
Usuń spacje w POCZĄTKU łańcucha:
Usuń spacje na końcu łańcucha:
Wszystkie trzy funkcje łańcucha
strip
lstrip
irstrip
mogą usuwać parametry łańcucha, przy czym domyślnie są to białe znaki. Może to być pomocne, gdy pracujesz z czymś szczególnym, na przykład możesz usunąć tylko spacje, ale nie znaki nowej linii:Lub możesz usunąć dodatkowe przecinki podczas czytania na liście ciągów:
źródło
Dokumenty Python:
źródło
re
zostało już zasugerowane, ale stwierdziłem, że rzeczywista odpowiedź na tytuł pytania była nieco ukryta wśród wszystkich innych opcji.