Python-strings beheersen: aanmaken, formateren en manipuleren
Python-strings
In deze tutorial leer je strings in Python aanmaken, formateren, wijzigen en verwijderen. Ook worden diverse string-bewerkingen en functies behandeld.
Video: Python-strings
Wat is een string in Python?
Een string is een reeks karakters.
Een karakter is simpelweg een symbool. Het Engels heeft bijvoorbeeld 26 karakters.
Computers werken niet met karakters, maar met getallen (binair). Hoewel je karakters ziet op je scherm, worden ze intern opgeslagen en gemanipuleerd als combinaties van 0'en en 1'en.
Deze omzetting van karakter naar getal heet encoding, het omgekeerde proces is decoding. ASCII en Unicode zijn populaire encodings.
In Python is een string een reeks Unicode-karakters. Unicode werd geïntroduceerd om elk karakter in alle talen te omvatten en uniformiteit in encoding te brengen. Meer over Unicode in Python Unicode.
Hoe een string aanmaken in Python?
Strings worden aangemaakt door karakters tussen enkele of dubbele aanhalingstekens te plaatsen. Drie aanhalingstekens kunnen ook worden gebruikt, meestal voor multiline strings en docstrings.
# strings definiëren in Python
# al het volgende is equivalent
my_string = 'Hallo'
print(my_string)
my_string = "Hallo"
print(my_string)
my_string = '''Hallo'''
print(my_string)
# triple quotes string kan meerdere regels beslaan
my_string = """Hallo, welkom in de wereld van Python"""
print(my_string)
Wanneer je het programma uitvoert, is de uitvoer:
Hallo Hallo Hallo Hallo, welkom in de wereld van Python
Hoe karakters in een string benaderen?
We kunnen individuele karakters benaderen met indexeren en een bereik karakters met slicing. Index begint bij 0. Het benaderen van een karakter buiten bereik geeft een IndexError. De index moet een integer zijn; floats of andere types geven TypeError.
Python staat negatieve indexering toe voor sequences.
Index -1 verwijst naar het laatste item, -2 naar het voorlaatste, enz. We kunnen een bereik items benaderen met de slicing-operator : (dubbele punt).
# String-karakters benaderen in Python
str = 'programiz'
print('str = ', str)
# eerste karakter
print('str[0] = ', str[0])
# laatste karakter
print('str[-1] = ', str[-1])
# slicing 2e tot 5e karakter
print('str[1:5] = ', str[1:5])
# slicing 6e tot 2e laatste karakter
print('str[5:-2] = ', str[5:-2])
Uitvoer:
str = programiz str[0] = p str[-1] = z str[1:5] = rogr str[5:-2] = am
Als we een index buiten bereik proberen of niet-integers gebruiken, krijgen we fouten.
# index moet in bereik zijn
>>> my_string[15]
...
IndexError: string index out of range
# index moet een integer zijn
>>> my_string[1.5]
...
TypeError: string indices must be integers
Slicing kan het beste gevisualiseerd worden door de index tussen de elementen te zien zoals hieronder getoond.
Als we een bereik willen benaderen, hebben we de index nodig die dat deel uit de string snijdt.

Hoe een string wijzigen of verwijderen?
Strings zijn onveranderlijk (immutable). Dit betekent dat elementen van een string niet gewijzigd kunnen worden nadat ze toegewezen zijn. We kunnen simpelweg andere strings toewijzen aan dezelfde naam.
>>> my_string = 'programiz'
>>> my_string[5] = 'a'
...
TypeError: 'str' object does not support item assignment
>>> my_string = 'Python'
>>> my_string
'Python'
We kunnen karakters niet verwijderen uit een string. Maar de string volledig verwijderen is mogelijk met het del-trefwoord.
>>> del my_string[1]
...
TypeError: 'str' object doesn't support item deletion
>>> del my_string
>>> my_string
...
NameError: name 'my_string' is not defined
Python-stringbewerkingen
Er zijn veel bewerkingen die met strings uitgevoerd kunnen worden, wat het een van de meest gebruikte datatypes in Python maakt.
Meer over datatypes in Python: Python Datatypes
Concatenatie van twee of meer strings
Het samenvoegen van twee of meer strings tot één heet concatenatie.
De +-operator doet dit in Python. Simpelweg twee string-literals naast elkaar schrijven concateneert ze ook.
De *-operator kan de string herhalen voor een gegeven aantal keer.
# Python String-bewerkingen
str1 = 'Hallo'
str2 ='Wereld!'
# met +
print('str1 + str2 = ', str1 + str2)
# met *
print('str1 * 3 =', str1 * 3)
Uitvoer:
str1 + str2 = HalloWereld! str1 * 3 = HalloHalloHallo
Twee string-literals naast elkaar schrijven concateneert ze ook als de +-operator.
Als we strings op verschillende regels willen concateneren, kunnen we haakjes gebruiken.
>>> # twee string-literals samen
>>> 'Hallo ''Wereld!'
'Hallo Wereld!'
>>> # met haakjes
>>> s = ('Hallo '
... 'Wereld')
>>> s
'Hallo Wereld'
Itereren door een string
We kunnen door een string itereren met een for-lus. Hier is een voorbeeld om het aantal 'l's in een string te tellen.
# Itereren door een string
count = 0
for letter in 'Hallo Wereld':
if(letter == 'l'):
count += 1
print(count, 'letters gevonden')
Uitvoer:
3 letters gevonden
String-lidmaatschapstest
We kunnen testen of een substring in een string voorkomt met het trefwoord in.
>>> 'a' in 'program'
True
>>> 'at' not in 'battle'
False
Ingebouwde functies voor strings
Verschillende ingebouwde functies die met sequences werken, werken ook met strings.
Veelgebruikte zijn enumerate() en len(). De enumerate()-functie retourneert een enumerate-object met index en waarde van alle items als paren. Dit is handig voor iteratie.
Op dezelfde manier geeft len() de lengte (aantal karakters) van de string.
str = 'koud'
# enumerate()
list_enumerate = list(enumerate(str))
print('list(enumerate(str)) = ', list_enumerate)
# karakters tellen
print('len(str) = ', len(str))
Uitvoer:
list(enumerate(str)) = [(0, 'k'), (1, 'o'), (2, 'l'), (3, 'd')] len(str) = 4
Python-stringformatering
Escapesequenties
Als we een tekst willen printen als Hij zei, "Wat is er?", kunnen we noch enkele noch dubbele aanhalingstekens gebruiken. Dit resulteert in een SyntaxError omdat de tekst zowel enkele als dubbele aanhalingstekens bevat.
>>> print("Hij zei, "Wat is er?"")
...
SyntaxError: invalid syntax
>>> print('Hij zei, "Wat is er?"')
...
SyntaxError: invalid syntax
Een oplossing is triple quotes gebruiken. Alternatief kunnen we escapesequenties gebruiken.
Een escapesequentie begint met een backslash en wordt anders geïnterpreteerd. Als we een enkele aanhalingsteken gebruiken voor een string, moeten alle enkele aanhalingstekens binnenin geëscapeerd worden. Hetzelfde geldt voor dubbele aanhalingstekens. Hier is hoe het gedaan kan worden voor de bovenstaande tekst.
# met triple quotes
print('''Hij zei, "Wat is er?"''')
# enkele aanhalingstekens escapen
print('Hij zei, "Wat\'s er?"')
# dubbele aanhalingstekens escapen
print("Hij zei, \"Wat is er?\"")
Uitvoer:
Hij zei, "Wat is er?" Hij zei, "Wat is er?" Hij zei, "Wat is er?"
Hier is een overzicht van alle escapesequenties die Python ondersteunt.
| Escapesequentie | Beschrijving |
|---|---|
| \newline | Backslash en newline genegeerd |
| \\ | Backslash |
| \' | Enkele aanhalingsteken |
| \" | Dubbele aanhalingsteken |
| \a | ASCII Bel |
| \b | ASCII Backspace |
| \f | ASCII Formfeed |
| \n | ASCII Linefeed |
| \r | ASCII Carriage Return |
| \t | ASCII Horizontale Tab |
| \v | ASCII Verticale Tab |
| \ooo | Karakter met octale waarde ooo |
| \xHH | Karakter met hexadecimale waarde HH |
Voorbeelden:
>>> print("C:\\Python32\\Lib")
C:\Python32\Lib
>>> print("Dit wordt geprint\nop twee regels")
Dit wordt geprint
op twee regels
>>> print("Dit is \x48\x45\x58 representatie")
Dit is HEX representatie
Raw string om escapesequenties te negeren
Soms willen we escapesequenties in een string negeren. Daartoe plaatsen we r of R voor de string. Dit impliceert dat het een raw string is en elke escapesequentie erin wordt genegeerd.
>>> print("Dit is \x61 \ngoed voorbeeld")
Dit is a
goed voorbeeld
>>> print(r"Dit is \x61 \ngoed voorbeeld")
Dit is \x61 \ngoed voorbeeld
De format()-methode voor stringformatering
De format()-methode die beschikbaar is bij het string-object is erg veelzijdig en krachtig bij het formatteren van strings. Format-strings bevatten accolades {} als placeholders of vervangingsvelden die vervangen worden.
We kunnen positie-argumenten of keyword-argumenten gebruiken om de volgorde te specificeren.
# Python string format() methode
# standaard (impliciete) volgorde
default_order = "{}, {} en {}".format('Jan','Piet','Klaas')
print('\n--- Standaard Volgorde ---')
print(default_order)
# volgorde met positie-argument
positional_order = "{1}, {0} en {2}".format('Jan','Piet','Klaas')
print('\n--- Positie Volgorde ---')
print(positional_order)
# volgorde met keyword-argument
keyword_order = "{k}, {p} en {j}".format(j='Jan',p='Piet',k='Klaas')
print('\n--- Keyword Volgorde ---')
print(keyword_order)
Uitvoer:
--- Standaard Volgorde --- Jan, Piet en Klaas --- Positie Volgorde --- Piet, Jan en Klaas --- Keyword Volgorde --- Klaas, Piet en Jan
De format()-methode kan optionele formaatspecificaties hebben. Ze worden gescheiden van de veldnaam door een dubbele punt. Bijvoorbeeld, we kunnen een string links uitlijnen <, rechts uitlijnen > of centreren ^ in de gegeven ruimte.
We kunnen ook integers formateren als binair, hexadecimaal, etc. en floats afronden of in exponent-notatie tonen. Er zijn talloze formateringsopties. Zie hier voor alle stringformatering met format().
>>> # integers formateren
>>> "Binaire representatie van {0} is {0:b}".format(12)
'Binaire representatie van 12 is 1100'
>>> # floats formateren
>>> "Exponent representatie: {0:e}".format(1566.345)
'Exponent representatie: 1.566345e+03'
>>> # afronden
>>> "Een derde is: {0:.3f}".format(1/3)
'Een derde is: 0.333'
>>> # string uitlijning
>>> "|{:<10}|{:^10}|{:>10}|".format('boter','brood','ham')
'|boter | brood | ham|'
Oude stijl formatering
We kunnen strings ook formateren als de oude sprintf()-stijl in C. We gebruiken de %-operator hiervoor.
>>> x = 12.3456789
>>> print('De waarde van x is %3.2f' %x)
De waarde van x is 12.35
>>> print('De waarde van x is %3.4f' %x)
De waarde van x is 12.3457
Algemene Python-stringmethoden
Er zijn talrijke methoden beschikbaar bij het string-object. De format()-methode hierboven is er een van. Veelgebruikte methoden zijn lower(), upper(), join(), split(), find(), replace() etc. Hier is een volledige lijst van alle ingebouwde methoden voor strings in Python.
>>> "PrOgRaMiZ".lower()
'programiz'
>>> "PrOgRaMiZ".upper()
'PROGRAMIZ'
>>> "Dit zal alle woorden in een lijst splitsen".split()
['Dit', 'zal', 'alle', 'woorden', 'in', 'een', 'lijst', 'splitsen']
>>> ' '.join(['Dit', 'zal', 'samenvoegen', 'alle', 'woorden', 'in', 'een', 'string'])
'Dit zal samenvoegen alle woorden in een string'
>>> 'Gelukkig Nieuw Jaar'.find('ieuw')
7
>>> 'Gelukkig Nieuw Jaar'.replace('Gelukkig','Schitterend')
'Schitterend Nieuw Jaar'
Python
- C# Strings: Fundamentals, Operaties & Geavanceerde Technieken
- Python-dictionaries beheersen: aanmaken, manipuleren en geavanceerde technieken
- Python-stringoperaties beheersen: Replace, Join, Split, Reverse en case-conversie
- Python's strip()-methode beheersen: Uitgebreide handleiding & praktische voorbeelden
- Python's str.count() beheersen: Karakters & substrings tellen met voorbeelden
- Python `format()` strings beheersen met duidelijke voorbeelden
- Python len(): Praktische handleiding voor het meten van objectlengtes
- Python's String.find()-methode beheersen: Syntaxis, voorbeelden & alternatieven
- Python's enumerate() meesteren: lussen met indices voor lijsten, tuples, strings en dictionaries
- Java Strings beheersen: aanmaken, methodes en best practices
- String representaties in Java Enums meesteren