Heb je je ooit afgevraagd wat de sleutel is om te doen? bevinding wat tekst in een document, of ervoor zorgen dat een tekst overeenstemt naar een ander formaat, zoals een e-mailadres bijvoorbeeld en andere soortgelijke bewerkingen?
De sleutel tot dergelijke operaties is reguliere expressies (regex). Laten we enkele definities voor reguliere expressies bekijken. In Wikipedia wordt regex als volgt gedefinieerd:
Een reeks tekens die een zoekpatroon definiëren, voornamelijk voor gebruik bij patroonaanpassing met tekenreeksen, of tekenreeksaanpassing, d.w.z. "zoeken en vervangen" -achtige bewerkingen. Het concept ontstond in de jaren 1950, toen de Amerikaanse wiskundige Stephen Kleene de beschrijving van een reguliere taal formaliseerde en gemeengoed werd met de Unix-tekstverwerkingsprogramma's ed, een editor en grep, een filter.
Een andere mooie definitie van regular-expressions.info is:
Een reguliere expressie (kortweg regex of regexp) is een speciale tekenreeks voor het beschrijven van een zoekpatroon. Je kunt reguliere expressies zien als wildcards op steroïden. U bent waarschijnlijk bekend met jokertekens zoals * .txt om alle tekstbestanden in een bestandsbeheerder te vinden. Het regex-equivalent is. * \. Txt $
Ik weet dat het concept van reguliere expressies nog steeds een beetje vaag klinkt. Laten we daarom enkele voorbeelden van regex bekijken om het concept beter te begrijpen.
In deze sectie zal ik enkele voorbeelden van regex tonen om u te helpen het concept verder te begrijpen.
Zeg dat je deze regex had:
/ Abder /
Dit vertelt ons eenvoudigweg om het woord aan te passen abder
enkel en alleen.
Hoe zit het met deze regex?
/ A [nr] t /
U kunt deze regex als volgt lezen: zoek een tekstpatroon zodat de eerste letter is een
en de laatste letter is t
, en tussen die letters komt ook n
of r
. Dus de overeenkomende woorden zijn mier
en kunst
.
Ik zal je op dit moment een kleine quiz geven. Hoe zou je een reguliere expressie schrijven die begint met ca
, en eindigt met een of alle van de volgende tekens TBR
? Ja, deze regex kan als volgt worden geschreven:
/ Ca [TBR] /
Als je een regex ziet die begint met een circumflex-accent ^
, dit betekent dat het overeenkomt met de string die begint met de string die hierna wordt genoemd ^
. Dus, als je de regex hieronder had, is het de reeks die begint met Deze
.
/ ^ Dit /
Dus in de volgende string:
Mijn naam is Abder Dit is Abder Dit is Tom
Gebaseerd op de regex / ^ Dit /
, de volgende strings worden gekoppeld:
Dit is Abder Dit is Tom
Wat als we een reeks met elkaar willen matchen loopt af met wat touwtjes? In dit geval gebruiken we het dollarteken $
. Hier is een voorbeeld:
abder $
Dus, in de bovenstaande string (de drie regels), zouden de volgende patronen overeenkomen met behulp van deze regex:
Mijn naam is Abder Dit is Abder
Nou, wat vind je van deze regex?
^ [A-Z] [a-z]
Ik weet dat het op het eerste gezicht ingewikkeld lijkt, maar laten we het stuk voor stuk bekijken.
We hebben al gezien wat een circumflex accent is ^
is. Het betekent overeenkomen met een string die begint met een string. [AZ]
verwijst naar de hoofdletters. Dus, als we dit deel van de regex lezen: ^ [A-Z]
, het vertelt ons om de string te matchen die begint met een hoofdletter. Het laatste deel, [A-z]
, betekent dat na het vinden van een string die begint met een hoofdletter, dit gevolgd zou worden door kleine letters uit het alfabet.
Dus, welke van de volgende strings worden gematcht met deze regex? Als je het niet zeker weet, kun je Python gebruiken, zoals we in het volgende gedeelte zullen zien om je antwoord te testen.
abder Abder ABDER ABder
Reguliere expressies zijn een zeer breed onderwerp, en die voorbeelden zijn slechts om u een idee te geven van wat ze zijn en waarom we ze gebruiken.
Een leuke verwijzing om meer te leren over reguliere expressies en meer voorbeelden te zien is RexEgg.
Laten we nu naar het leuke gedeelte komen. We willen zien hoe je kunt werken met enkele van de bovenstaande reguliere expressies in Python. De module die we zullen gebruiken om met reguliere expressies in Python te werken, is de opnieuw
module.
Het eerste voorbeeld ging over het vinden van het woord abder
. In Python zouden we dit als volgt doen:
import re text = 'Mijn naam is Abder' match_pattern = re.match (r'Abder ', tekst) print match_pattern
Als u het bovenstaande Python-script uitvoert, krijgt u de uitvoer: Geen
!
Het script werkt prima, maar het probleem zit hem in hoe de functie werkt wedstrijd()
werken. Als we terugkeren naar de opnieuw
module documentatie, dit is wat de functie is wedstrijd()
doet:
Als nul of meer tekens aan het begin van de tekenreeks overeenkomen met het reguliere expressiepatroon, retourneert u een overeenkomstig zoekobject. Return None als de string niet overeenkomt met het patroon; merk op dat dit verschilt van een nul-lengte overeenkomst.
Aha, hieruit kunnen we dat zien wedstrijd()
retourneert alleen een resultaat als het een overeenkomst heeft gevonden in de begin van de string.
We kunnen in plaats daarvan de functie gebruiken zoeken()
, wat is, gebaseerd op de documentatie:
Scan door tekenreeks op zoek naar de eerste locatie waar het reguliere expressiepatroon een overeenkomst oplevert en retourneer een overeenkomstig zoekobject. Return None als geen positie in de string overeenkomt met het patroon; merk op dat dit verschilt van het vinden van een nullengte-overeenkomst op een bepaald punt in de reeks.
Dus, als we het bovenstaande script schrijven, maar met zoeken()
in plaats van wedstrijd()
, we krijgen de volgende output:
<_sre.SRE_Match object at 0x101cfc988>
Dat is een match object
is teruggestuurd.
Als we het resultaat willen retourneren (string-overeenkomst), gebruiken we de groep()
functie. Als we de hele wedstrijd willen zien, gebruiken we groep (0)
. Dus:
print match_pattern.group (0)
zal de uitvoer retourneren: abder
.
Als we de tweede regex in het vorige gedeelte nemen, is dat / A [nr] t /
, het kan als volgt in Python worden geschreven:
import re text = 'Dit is een zwarte mier' match_pattern = re.search (r'a [nr] t ', tekst) print match_pattern.group (0)
De uitvoer voor dit script is: mier
.
Het artikel wordt langer en het onderwerp reguliere expressies in Python neemt zeker meer dan één artikel, zo niet een boek op zich.
Dit artikel is echter om je een snel begin en vertrouwen te geven om de wereld van reguliere expressies in Python binnen te gaan. U kunt verwijzen naar de opnieuw
documentatie om meer over deze module te leren en om dieper op het onderwerp in te gaan.