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+0020
maar 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 split
en 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 lstrip
gebruiken om witruimte te verwijderen alleen vanaf het begin van de tekenreeks, en rstrip
tot 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 strip
om 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:
strip
doet 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 strip
lstrip
en rstrip
kunnen 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:
- https://docs.python.org/library/stdtypes.html#textseq
- https://docs.python.org/library/stdtypes.html# str.vervangen
- https://docs.python.org/library/string.html# string.replace
- https://docs.python.org/library/re.html# re.sub
- https://docs.python.org/library/re. html#regular-expression-syntax
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