Reguliere Expressies: Introductie tot Regex voor Python

Reguliere expressies, beter bekend als regex of regexp is een handige tool die het leven van vele programmeurs stukken makkelijker maakt. Regex zorgt ervoor dat bulkbewerkingen van data, het verwerken van tekst en het matchen van patronen volgens een standaard regelgeving kunnen worden uitgevoerd. Omdat reguliere expressies volgens een standaard Wij helpen je op weg door de basisregels uit te leggen en geven je een aantal handige tips.

Wat zijn reguliere expressies?

Regex is een optie die jou toelaat om teksten te selecteren volgens een patroon. Met deze selectie op basis van door jouw gedefinieerde criteria kun je teksten bewerken. Regex is gebaseerd op vaste regels die toepasbaar zijn in veel verschillende programmeertalen, ook buiten Python om. Denk hierbij aan: Ruby, Java, JavaScript, C#, C++ en Perl. Het doel van Regex is om een exact patroon te definiëren in tekst (string) zodat deze gevonden en/of vervangen kan worden. Wanneer je dit combineert met een script kun je bijvoorbeeld complexe stukken tekst geheel geautomatiseerd bewerken. Dit scheelt vele uren handmatig teksten bewerken.

Wanneer gebruik je reguliere expressies?

Regex kan in een tal van situaties van pas komen. Zo kom je deze tegen in code- en tekst bewerkingsprogramma’s, web scraping en het valideren van bepaalde input. Met de door jou gedefinieerde reguliere expressie kun je bepaalde woorden in een tekst vinden in documenten, websites of andere bronnen. Vervolgens kun je jouw script hier op laten reageren. Een voorbeeld: Je hebt een stuk tekst aangeleverd gekregen en de schrijver van de tekst heeft tussen haakjes grote stukken commentaar geschreven. De tekst klopt prima wanneer alle tekst tussen haakjes verwijderd is dus besluit je alle comments van de schrijver handmatig te verwijderen. Een essentieel stukje informatie: de tekst is een boekwerk van ruim 200 pagina’s en je bent hier bijna een hele dag mee bezig. Het is natuurlijk zonder om hier een hele dag aan kwijt te zijn wanneer je dit werk ook eenvoudig kunt automatiseren. Met Regex kun je alle tekst van ‘(‘ tot ‘)’ selecteren om deze vervolgens te verwijderen. Dit doe je met de volgende expressie:

(?<=().*?(?=))

Dit lijkt wellicht nog wat ingewikkeld, maar wij leggen je hieronder de basisregels uit.

De re module voor reguliere expressies

Om gebruik te kunnen maken van Regex in Python dien je de re module aan te roepen aan het begin van je code. De re module kent veel handige functionaliteiten, in dit artikel behandelen we enkel de re.search() functie. Het aanroepen van de module en haar bijbehorende functie ziet er als volgt uit:

import re
re.search(...)

Of

from re import search

Bij het aanroepen van de functie vul je tussen de haakjes eerst de definitie van de tekst die je wilt vinden gevolgd door de string waar je in wilt zoeken. Dit ziet er als volgt uit: re.search(<regex>, <string>) Een voorbeeld hiervan is:

import re
zin = "Dit is een string"
re.search('Dit', zin)

In het voorbeeld wordt eerst de regex module aangeroepen. Vervolgens wordt er een string toegewezen aan de variabele genaamd ‘zin’. Tot slot gaan we in regel 3 opzoek naar het woord ‘Dit’ in de variabele. In de praktijk (terminal) ziet bovenstaande code er als volgt uit:

Output in de terminal

Basistekens: Anchors – ^ en $

  • ^ betekent dat je iets wilt matchen aan het begin van een string.
  • $ betekent dat je iets wilt matchen aan het einde van een string.
TekensMatcht met
pizzaMatch met iedere string die het woord pizza bevat
^altijdMatcht met alle strings die met altijd beginnen
einde$Matcht met alle strings die eindigen met einde
^wij eten altijd pizza$Matcht alleen met een string die exact overeen komt met wij eten altijd pizza

Basistekens: ‘OR’ Operator – | en [ ]

TekensMatcht met
a(b|c)matcht een string met een a gevolgd door een b of een c
a[bc]Hetzelfde als bovenstaande maar dan zonder b of c af te vangen.

Een praktijkvoorbeeld

Stel je bent met een aantal wijnen bezig en wilt hiervan enkel de namen hebben zonder de jaartallen. Je krijgt een Excel bestand aangeleverd dat er uitziet als onderstaand tabel. Per ongeluk heeft iemand je alle jaartallen meegegeven in de kolom van de productnamen. Met de onderstaande reguliere expressie kun je deze er allemaal uitfilteren.

ProductnamenJaarPrijs
Bergerac Blanc Sec 20182018€7,50
Casillero Del Diablo 20172017€6,90
Sauvignon de Touraine 20182018€5,80
Santa Tierra Reserva Chardonnay 20122012€9,10
([\s])[0-9]{4}([^\.])

https://regex101.com/r/sJ9gM7/659

Bekijk dit item op regex101.com

Top 10 Reguliere Expressies – Artikel met de 10 belangrijkste expressies
Regex101.com – Handige editor en tips
Python.org Library – De officiële Python Regex documentatie