Nog meer voorbeelden
Even terugkijken.....wat hebben we tot nu toe gedaan.
Tot nu toe hebben we teksten gevalideerd. We hebben gekeken of een string voldoet aan een bepaald patroon.
We hebben bijvoorbeeld bepaald of een getal een valide 06-nummer is, hiervoor gebruikte we de expressie:
^06\d{8}$ | begin met 06 en dan precies 8 decimalen de d staat voor decimalen en {8} staat voor 8 posities |
We hebben verder bepaald of een string een hex getal is met de reguliere expressie:
^[0-9A-F]+$ | begin met een 0,1,2,3,4,5,6,7,8,9,0,A,B,C,D,E,F en herhaal dat 1 of meer keren tot het eind. |
Als we willen weten of er ergens in de tekst een 06-nummer staat dan kunnen we de ^ en $ weglaten. Er wordt dan niet meer van het begin naar het einde gezocht, maar gekeken of er ergens een rij karakters is dat voldoet aan de expressie.
In de laatste reguliere expressie zie je een plus. In reguliere expressies hebben de symbolen ?
, +
en *
verschillende betekenissen en worden ze gebruikt om het aantal herhalingen van een patroon in de tekst te bepalen.
Teken | Betekenis | Voorbeeld | |
als je niets plaats dan moet het element 1x voorkomen. | A | Alleen A voldoet | |
+ | een plus betekent 1 of meer keren | AB+ | AB |
* | een * betekent 0, 1 of meer keren | AB*C | AC en ABC of ABBBC voldoen |
? | een ? betekent 0 of 1 keer | AB?C | AC en ABC voldoen |
Voor het teken kan des een teken staan of een groep tekens, je kunt ook een . Gebruiken.
ABC+ | A komt 1 keer voor dan een B en dan één of meer keren een C. ABCCC is dus goed, AABC niet. |
[A-C]+ | A,B of C komen 1 of meer keren voor. ABCAABBAA is dus goed en A ook. |
[A-C]{5,6} | A,B, of C en dat minimaal 5 en maximaal 6 keer. CBBCBA is dus goed, maar CBBCBAC niet omdat dat een karakter te veel is. |
.* | Elk karakter (any) komt 0 of meer keren voor (alles matched dus). |
En dan kun je nog ^ of $ gebruiken.
Expressie | Uitleg | Voorbeeld van een match |
^ABC | De tekst begint met ABC, daarna mag alles | ABC zijn de beginletters van het alfabet. |
^AB*C | De tekst begint met een A dan 0,1, of meer B's en dan een C, daarna mag alles | AC wordt gebruikt als afkorting voor airconditioner |
^A*B* | De tekst mag alleen 0,1 of meer A;s bevatten gevolgd door 0,1 of meer B's. | BB staat for bed & breakfast |
^[A-Z]+$ | De tekst bestaat alleen uit hoofdletters en er moet er minimaal één voorkomen. | KIJK UIT |
De validatie in python doe je met het commando:
re.match(expressie, text)
Opdracht
Jij krijgt nu een tabel met een expressie. De kolom uitleg en match is leeg. Jij moet die kolommen vullen. Leg uit wat de expressie doet en bepaal of de tekst een match is. Probeer de expressie uit met de code van de vorige opgave.
Expressie | Tekst | Match? | Uitleg in eigen woorden (waarom wel of geen match) |
---|---|---|---|
expressie= r'[0-9]+^' | Mijn nummer is: 06 - 1234 1234 | ||
expressie= r'[0-9]{8,10}^' |
Mijn nummer is: 06 - 1234 1234 | ||
expressie= r'$[A-Z]+' | Mijn nummer is: 06 - 1234 1234 | ||
expressie= r'max' | Maximale temperatuur is 12 graden | ||
expressie= r'[max]' | x-men | ||
expressie= r'[k-mK-M]' | Dit is een voorbeeld | ||
expressie= r'$[k-mK-M]' | Matig je alcohol gebruik! | ||
expressie= r'$[k-mK-M]' | Gaat de KLM failliet? | ||
expressie= r'^[a-kA-K]+$' | De kakkerlak kakt | ||
expressie= r'$[k-mK-M]$' | De kakkerlak kakt erg veel |
Test alle reguliere expressies en zet in de kolom match of het voorbeeld een matched met de reguliere expressie.
Gebruik de code van de vorige opdracht om je antwoorden te controleren.
Inleveren
- PDF met jouw naam en de tabel waarin je in de laatste kolom met true of false (wel of geen match) aangeeft en daarachter een uitleg geeft.
- De code waarmee je de voorbeelden hebt gecontroleerd.
--