Verwijder alle witruimte in een string

Ik wil alle witruimte uit een string verwijderen, aan beide uiteinden en tussen woorden.

Ik heb deze Python-code:

def my_handle(self):
    sentence = ' hello  apple  '
    sentence.strip()

Maar dat elimineert alleen de witruimte aan beide zijden van de string. Hoe verwijder ik alle witruimte?


Antwoord 1, autoriteit 100%

Als u voor- en eindspaties wilt verwijderen, gebruikt u str.strip():

sentence = ' hello  apple'
sentence.strip()
>>> 'hello  apple'

Als u alle spatietekens wilt verwijderen, gebruikt u str.replace():

(NB dit verwijdert alleen het normale ASCII-spatieteken ' ' U+0020maar niet elke andere witruimte)

sentence = ' hello  apple'
sentence.replace(" ", "")
>>> 'helloapple'

Als je dubbele spaties wilt verwijderen, gebruik je str.split():

sentence = ' hello  apple'
" ".join(sentence.split())
>>> 'hello apple'

Antwoord 2, autoriteit 17%

Om alleen spatieste verwijderen, gebruikt u str.replace:

sentence = sentence.replace(' ', '')

Om alle witruimtetekens(spatie, tab, nieuwe regel, enzovoort) te verwijderen, kunt u spliten vervolgens join:

sentence = ''.join(sentence.split())

of een reguliere expressie:

import re
pattern = re.compile(r'\s+')
sentence = re.sub(pattern, '', sentence)

Als je alleen witruimte aan het begin en einde wilt verwijderen, kun je strip:

sentence = sentence.strip()

Je kunt ook lstripgebruiken om witruimte te verwijderen alleen vanaf het begin van de tekenreeks, en rstriptot verwijder witruimte aan het einde van de tekenreeks.


Antwoord 3, autoriteit 6%

Een alternatief is om reguliere expressies te gebruiken en ook deze vreemde witruimtetekenste matchen . Hier zijn enkele voorbeelden:

Verwijder ALLE spaties in een string, zelfs tussen woorden:

import re
sentence = re.sub(r"\s+", "", sentence, flags=re.UNICODE)

Verwijder spaties aan het BEGIN van een tekenreeks:

import re
sentence = re.sub(r"^\s+", "", sentence, flags=re.UNICODE)

Verwijder spaties aan het EINDE van een tekenreeks:

import re
sentence = re.sub(r"\s+$", "", sentence, flags=re.UNICODE)

Verwijder spaties zowel aan het BEGIN als aan het EINDE van een tekenreeks:

import re
sentence = re.sub("^\s+|\s+$", "", sentence, flags=re.UNICODE)

Verwijder ALLEEN DUBBELE spaties:

import re
sentence = " ".join(re.split("\s+", sentence, flags=re.UNICODE))

(Alle voorbeelden werken in zowel Python 2 als Python 3)


Antwoord 4, autoriteit 3%

‘Witruimte’ omvat spatie, tabbladen en CRLF. Dus een elegante en one-linertekenreeksfunctie die we kunnen gebruiken is str.translate:

Python 3

' hello  apple '.translate(str.maketrans('', '', ' \n\t\r'))

OFals je grondig wilt zijn:

import string
' hello  apple'.translate(str.maketrans('', '', string.whitespace))

Python 2

' hello  apple'.translate(None, ' \n\t\r')

OFals je grondig wilt zijn:

import string
' hello  apple'.translate(None, string.whitespace)

Antwoord 5

Gebruik stripom witruimte aan het begin en einde te verwijderen.

>> "  foo bar   ".strip()
"foo bar"

Antwoord 6

' hello  \n\tapple'.translate({ord(c):None for c in ' \n\t\r'})

MaK wees hierboven al op de “vertaal”-methode. En deze variant werkt met Python 3 (zie deze V&A).


Antwoord 7

Wees voorzichtig:

stripdoet een rstrip en lstrip (verwijdert voorloop- en volgspaties, tabs, returns en formulierfeeds, maar verwijdert ze niet in het midden van de string).

Als u alleen spaties en tabbladen vervangt, kunt u verborgen CRLF’s krijgen die lijken te passen bij wat u zoekt, maar niet hetzelfde zijn.


Antwoord 8

Bovendien heeft stripenkele varianten:

Verwijder spaties in het BEGIN en EINDE van een tekenreeks:

sentence= sentence.strip()

Verwijder spaties aan het BEGIN van een tekenreeks:

sentence = sentence.lstrip()

Verwijder spaties aan het EINDE van een tekenreeks:

sentence= sentence.rstrip()

Alle drie de tekenreeksfuncties striplstripen rstripkunnen parameters van de tekenreeks gebruiken om te strippen, waarbij de standaard allemaal witruimte is. Dit kan handig zijn als u met iets specifieks werkt, u kunt bijvoorbeeld alleen spaties verwijderen, maar geen nieuwe regels:

" 1. Step 1\n".strip(" ")

Of u kunt extra komma’s verwijderen bij het lezen in een tekenreekslijst:

"1,2,3,".strip(",")

Antwoord 9

elimineer alle witruimte van een tekenreeks, aan beide uiteinden en tussen woorden.

>>> import re
>>> re.sub("\s+", # one or more repetition of whitespace
    '', # replace with empty string (->remove)
    ''' hello
...    apple
... ''')
'helloapple'

Python-documenten:


Antwoord 10

import re    
sentence = ' hello  apple'
re.sub(' ','',sentence) #helloworld (remove all spaces)
re.sub('  ',' ',sentence) #hello world (remove double spaces)

Antwoord 11

Ik gebruik split() om alle spaties te negeren en gebruik join() om samen te voegen
snaren.

sentence = ''.join(' hello  apple  '.split())
print(sentence) #=> 'helloapple'

Ik geef de voorkeur aan deze benadering omdat het slechts een uitdrukking is (geen verklaring).
Het is gemakkelijk te gebruiken en kan worden gebruikt zonder een variabele te binden.

print(''.join(' hello  apple  '.split())) # no need to binding to a variable

Antwoord 12

probeer dit.. in plaats van re te gebruiken, denk ik dat het gebruik van split met strip veel beter is

def my_handle(self):
    sentence = ' hello  apple  '
    ' '.join(x.strip() for x in sentence.split())
#hello apple
    ''.join(x.strip() for x in sentence.split())
#helloapple

Other episodes