Python Reguliere Expressies Onder de Loep: re.match(), re.search(), re.findall() – Praktische Voorbeelden
Wat is een Reguliere Expressie in Python?
reguliere expressie (regex) is een compacte tekstuele beschrijving die Python vertelt hoe patronen binnen een string te lokaliseren. Regexes zijn onmisbaar voor data-extractie, validatie en transformatie in codebases, logs, configuratiebestanden en web-scraping-projecten.
In Python wordt de re module meegeleverd met de interpreter en blootlegt een rijke API voor het compileren van patronen, zoeken en vervangen van tekst. Of je nu gebruikersinvoer filtert, logs parseert of content scrapet van websites, een solide begrip van regex-fundamenten bespaart tijd en vermindert bugs.
Kern Regex Concepten
- Letterlijke karakters – matchen de exacte tekst die je schrijft.
- Metakarakteren – speciale symbolen die klassen, ranges of quantifiers beschrijven (bijv.
\d,\w,+,?,*). - Ankers –
^en$pinnen het patroon aan het begin of einde van een string. - Quantifiers – specificeren hoe vaak een token mag herhalen.
- Groepen & alternatie – vangen sub-matches en staan meerdere opties toe.
- Flags – passen patroon-gedrag aan (case-insensitief, multiline, etc.).
Algemene Identifier Tabel
| Identifier | Beschrijving | Witruimte | Speciale Escape |
|---|---|---|---|
| \d | Elk cijfer (0-9) | \n | ., +, *, ?, [], $, ^, (, ), {}, |, \ |
| \D | Non-cijfer | \s | |
| \s | Spatie, tab, newline, etc. | \t | |
| \S | Non-spatie | \e | |
| \w | Alfanumeriek plus underscore | \r | |
| \W | Non-alfanumeriek (underscore uitgezonderd) | \f | |
| . | Elk karakter behalve newline | — | |
| \b | Woordgrens | — | |
| \. | Letterlijke punt | — | |
| \{x} | Precies x voorkomens | — |
Aan de Slag met re
import re
De re module is onderdeel van Python's standaardbibliotheek en vereist geen externe dependencies. Veelvoorkomende use-cases zijn:
- String-validatie (bijv. e-mailadressen, telefoonnummers)
- Data-extractie uit ongestructureerde tekst
- Geautomatiseerd web-scraping
Voorbeeld 1: \w+ en ^
^– anker aan het begin van een string.\w+– één of meer woordkarakters (letters, cijfers, underscore).
Met deze kun je het eerste woord van een string vangen:
import re sample = "guru99, education is fun" result = re.findall(r"^\w+", sample) print(result) # Output: ['guru99']
Het verwijderen van de + zou alleen het eerste karakter retourneren: ["g"].
Voorbeeld 2: Splitsen op Witruimte met \s
De re.split() functie kan een string splitsen waar een patroon matcht. Met \s splitst het op elk witruimte-teken.
import re tekst = "we zijn de woorden aan het splitsen" print(re.split(r"\s", tekst)) # ['we', 'zijn', 'de', 'woorden', 'aan', 'het', 'splitsen']
Als de backslash weggelaten wordt, wordt s als letterlijk behandeld, wat resulteert in splitsingen bij elke s karakter.
Regex Methodes Overzicht
re.match()– checkt voor een match alleen aan het begin van de string.re.search()– scant de gehele string en retourneert de eerste match.re.findall()– retourneert een lijst van alle non-overlappende matches.
re.match() Gebruiken
import re tekst = "guru99 is een geweldig platform" match = re.match(r"^\w+", tekst) print(match.group() if match else "Geen match") # Output: guru99
re.search() Gebruiken
import re
tekst = "Software Testing is leuk"
for patroon in ["Software testing", "guru99"]:
gevonden = re.search(patroon, tekst, re.IGNORECASE)
print(f"Zoeken naar '{patroon}' in '{tekst}' - {'gevonden een match!' if gevonden else 'geen match'}")
re.findall() Gebruiken
import re
emails = "guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com"
gevonden = re.findall(r"[\w\.-]+@[\w\.-]+", emails)
for e in gevonden:
print(e)
Regex Flags
Flags wijzigen patroon-gedrag. Veelvoorkomende flags zijn:
| Flag | Beschrijving |
|---|---|
| re.M (re.MULTILINE) | Maak ^ en $ matchen met begin en einde van elke regel. |
| re.I (re.IGNORECASE) | Negeer hoofdlettergevoeligheid. |
| re.S (re.DOTALL) | Maak punt matchen met newlines. |
| re.U (re.UNICODE) | Pas Unicode-aware karakterklassen toe. |
| re.L (re.LOCALE) | Maak klassen afhankelijk van de huidige locale. |
| re.X (re.VERBOSE) | Staat witruimte en comments in het patroon toe. |
Multiline Voorbeeld
import re tekst = """guru99 careerguru99 selenium""" print(re.findall(r"^\w", tekst)) # ['g'] print(re.findall(r"^\w", tekst, re.MULTILINE)) # ['g', 'c', 's']
Python 2 Compatibiliteit
Alle bovenstaande voorbeelden zijn geschreven voor Python 3. Als je ze onder Python 2 moet draaien, vervang print() statements met Python 2-syntaxis en zorg dat de re module op dezelfde manier geïmporteerd wordt.
Kernboodschap
Python regex onder de knie krijgen geeft je een krachtig toolkit voor tekstverwerking:
- Gebruik
re.match()voor patronen geankerd aan het begin. - Gebruik
re.search()voor een globale zoektocht. - Gebruik
re.findall()om alle matches te extraheren. - Pas flags toe (bijv.
re.IGNORECASE,re.MULTILINE) om gedrag fijn af te stellen. - Onthoud om patronen te testen met Regex101 of soortgelijke tools voor deployment.
Python
- 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 round()-functie uitgelegd met praktische voorbeelden
- Python's map()-functie beheersen: syntaxis, voorbeelden en best practices
- Python timeit() – Uitvoeringstijd meten met praktische voorbeelden
- Python Counter in collections – Efficiënt tellen, updaten en rekenkundige operaties
- Python list.count(): Expert Gids met Praktische Voorbeelden
- Python List index() – Elementposities Vinden met Praktische Voorbeelden