Als je een programmeur bent, is de kans groot dat je al weet wat reguliere expressies (regex) zijn. Regex-patronen zijn geïmplementeerd in bijna elke reguliere programmeertaal, maar toch worden de kracht en veelzijdigheid van deze patronen niet herkend door de meeste ontwikkelaars.
Deze gids gaat helemaal over reguliere expressies en hoe je ze kunt gebruiken in de programmeertaal Python.
Wat zijn reguliere expressies?
Reguliere expressies zijn patronen die een gebruiker helpen bij het matchen van tekencombinaties in tekstbestanden en tekenreeksen. U kunt reguliere expressies gebruiken om een specifiek patroon te filteren of te zoeken in de uitvoer van een opdracht of een document.
Er zijn verschillende use-cases van reguliere expressies, waarvan de meest bekende het grep-commando in Linux. Andere toepassingen zijn onder meer het filteren van informatie, zoals het extraheren van e-mailadressen en telefoonnummers uit een datadump.
De belangrijkste reden waarom veel ontwikkelaars afwijken van reguliere expressies, is het gebrek aan bewustzijn over de kracht van patroonaanpassing. Sommigen vinden reguliere expressies zelfs verwarrend vanwege het grote aantal tekens en reeksen dat in de patronen wordt gebruikt.
Wat de reden ook mag zijn, reguliere expressies zijn en zullen een van de belangrijkste aspecten van programmeren zijn die iedereen zou moeten kennen.
Reguliere expressies: overeenkomende tekens en reeksen
Regex is een geheel nieuwe taal op zich. Een regex-engine interpreteert patronen die bestaan uit verschillende tekens die zijn uitgerust met een specifieke betekenis. Basisletters, zoals alfanumerieke tekens, komen overeen met zichzelf. Maar complexe karakters zoals $, *, +, {, etc. hulp bij het matchen van een hogere orde.
- Asterisk (*): Komt nul of meer keer overeen met het voorgaande teken. De letterlijke betekenis van het karakter zou zijn "Element vermenigvuldigd met n keer". Als de reguliere expressie bijvoorbeeld abc*, de overeenkomende strings zijn ab, abc, abcc, abccc, abcccc, etc. De uitdrukking [bc] * komt overeen met bc, bcbc, bcbc, etc.
- Plus (+): Komt een of meerdere keren overeen met het voorgaande teken. De werking van de + karakter is vergelijkbaar met *, maar de + karakter laat het patroon weg als het karakter niet voorkomt. Bijvoorbeeld, abc + komt overeen met abc, abcc, abccc, etc. maar niet ab.
- Vraagteken (?): Komt overeen met het voorgaande teken nul of één keer. Bijvoorbeeld het patroon abc? komt alleen overeen met ab en abc.
- Pijp (|): Gebruikt als een binair bestand OF operator. Komt overeen met een van de karakters voorafgaand aan en volgend op de pijp. Bijvoorbeeld, a | b komt overeen met a of b.
- Punt (.): Komt overeen met een personage waarvan de identiteit onbekend is. Bijvoorbeeld, a.c komt overeen met aac, abc, acc, a2c, enzovoort.
- Wortel (^): Komt overeen met het eerste teken in het patroon. Bijvoorbeeld, ^ Ra komt overeen met woorden die beginnen met Ra zoals Konijn, Wasbeer en Willekeurig.
- Dollar ($): Komt overeen met het laatste teken in het patroon. Bijvoorbeeld, een $ zal overeenkomen met woorden die eindigen op een zoals Van, Dan en Plan.
- Liggend streepje (-): Wordt gebruikt om een reeks tekens te definiëren. Bijvoorbeeld, [0-9] komt overeen met alle eencijferige numerieke tekens.
Speciale reeksen die in reguliere expressiepatronen worden gebruikt, zijn:
- \EEN: Retourneert een overeenkomst als de volgende tekens aan het begin van de tekenreeks staan. Bijvoorbeeld, \ AThe komt overeen met woorden die beginnen met de De zoals The, Them, They, etc.
- \ b: Retourneert een overeenkomst als het teken aan het begin of aan het einde van een woord wordt gevonden. Bijvoorbeeld, \ bmad en gek \ b komt overeen met woorden zoals gemaakt en nomade respectievelijk.
- \ B: Retourneert een overeenkomst als het teken niet aan het begin of einde van een woord wordt gevonden.
- \ d: Komt overeen met numerieke tekens in de tekenreeks. Bijvoorbeeld, /d* komt overeen met nummers zoals 1, 12, 1232, etc.
- \ D: Komt overeen met niet-numerieke tekens in de tekenreeks. / D komt overeen met a, b, c, f, etc.
- \ s: Komt overeen met een witruimteteken in de tekst.
- \ S: Komt overeen met een niet-witruimte-teken in de tekst.
- \ w: Retourneert een overeenkomst als de tekenreeks alfanumerieke tekens bevat, inclusief onderstrepingstekens. Bijvoorbeeld, \ w komt overeen met a, b, c, d, 1, 2, 3, etc.
- \ W: Retourneert een overeenkomst als de tekenreeks geen alfanumerieke tekens of onderstrepingstekens bevat.
- \ Z: Komt overeen met tekens aan het einde van een tekenreeks. Bijvoorbeeld, einde \ Z zal overeenkomen met woorden die eindigen op einde zoals buigen, herstellen, verzorgen, etc.
Python-methoden voor reguliere expressies
In Python is het opnieuw bibliotheek biedt alle noodzakelijke functies en hulpprogramma's die nodig zijn om regex in uw programma's te implementeren. U hoeft de bibliotheek niet te downloaden met pip, aangezien deze vooraf is geïnstalleerd met de Python-interpreter.
Om het opnieuw bibliotheek in Python, voeg de volgende code toe aan je script:
import re
Merk op dat bij het doorgeven van reguliere expressies in Python, we onbewerkte strings gebruiken omdat ze geen speciale tekens interpreteren, zoals \ n en \ t anders.
Bij elkaar passen()
De re.match () methode in Python retourneert een regex-object als het programma een overeenkomst vindt aan het begin van de opgegeven tekenreeks. Deze functie heeft twee basisargumenten:
re.match (patroon, string)
...waar patroon is de reguliere expressie en draad is de tekst die moet worden doorzocht.
Bekijk het onderstaande codefragment.
import re
match = re.match (r'Word ', "Deze zin bevat een woord")
print (wedstrijd)
De r karakter voor de string staat voor raw string.
Uitgang:
Geen
De bovengenoemde code keert terug Geen omdat Woord was niet aanwezig aan het begin van de string.
Als er een overeenkomst wordt gevonden, kunt u de overeenkomst afdrukken met de groep() methode die bij het regex-object hoort.
import re
match = re.match (r'Word ', "Woord is moeilijk te lezen")
print (match.group (0))
Uitgang:
Woord
Zoeken()
De Onderzoek() methode heeft vergelijkbare argumenten als re.match (). Terwijl match () alleen overeenkomsten retourneert die aan het begin van de tekenreeks staan, zoeken() zal overeenkomsten teruggeven die gevonden zijn op elke index in de string.
import re
match = re.search (r'Word ', "Deze zin bevat een woord. Woord is moeilijk te lezen. ")
print (match.group (0))
Merk op dat de bij elkaar passen() en zoeken() methoden retourneren slechts één patroonovereenkomst. In de bovengenoemde code, Woord verschijnt tweemaal. Maar de zoeken() functie komt alleen overeen met de eerste keer dat het woord voorkomt.
Woord
Vind alle()
Zoals je al kunt raden, is de vind alle() methode retourneert elke mogelijke overeenkomst in de tekenreeks.
import re
match = re.search (r'Word ', "Deze zin bevat een woord. Woord is moeilijk te lezen. ")
voor elem in wedstrijd:
print (elem)
In plaats van een regex-object te retourneren, retourneert de functie findall () een lijst met alle overeenkomsten. U kunt de lijst doorlopen met een for loop in python.
Splitsen ()
Als je een string in subtekenreeksen wilt splitsen met een patroon als scheidingsteken, dan is de splitsen () functie is degene die je nodig hebt.
import re
split = re.split (r'and ', "Dit woord en dat en dit zijn verschillend.")
print (split)
Uitgang:
['Dit woord', 'dat', 'dit is anders'.]
Sub()
De sub() methode stelt een gebruiker in staat om een specifiek woord te vervangen in de plaats van een patroon. Er zijn de volgende argumenten voor nodig.
re.sub (patroon, vervanging, string)
Beschouw dit codefragment:
import re
result = re.sub (r'and ',' of ', "Dave en Harry moeten gestraft worden.")
print (resultaat)
Uitgang:
Dave of Harry moet worden gestraft.
Compileren()
De heropstapelen () methode in de opnieuw bibliotheek stelt een gebruiker in staat om een gecompileerde versie van het reguliere-expressiepatroon in het geheugen op te slaan. Vervolgens kan de gebruiker met behulp van het gecompileerde object snel de opgegeven tekstdump filteren op overeenkomende patronen.
import re
pattern = re.compile ('Python')
match = pattern.findall ("Python is een geweldige taal voor het schrijven van scripts. Python is gemakkelijk te leren. ")
print (wedstrijd)
Deze functie wordt voornamelijk gebruikt voor het opslaan van patronen die arbeidsintensief zijn en veel tijd nodig hebben om uit te voeren. Dit probleem wordt opgelost door het patroon vooraf als object te compileren en op te slaan.
Maak gebruik van de kracht van Regex met Python
Wanneer u met tekstbestanden en uitvoer werkt, is regex een geweldig hulpmiddel om tot uw beschikking te hebben. U kunt snel wat code schrijven om specifieke patronen in het document te filteren of te vervangen.
Het onthouden van alle karakters en overeenkomende reeksen kan moeilijk zijn als je net begint met regex. Om beter te worden in reguliere expressies, zal het af en toe verwijzen naar een lijst met karakters, methoden en reeksen je zeker helpen op de lange termijn.
Gebruik deze lijst met reguliere Python-expressies zodat u deze veelzijdige programmeertaal beter kunt gebruiken.
Lees Volgende
- Programmeren
- Programmeren
- Python
Deepesh is de Junior Editor voor Linux bij MUO. Hij schrijft al meer dan drie jaar informatieve inhoud op internet. In zijn vrije tijd houdt hij van schrijven, naar muziek luisteren en gitaar spelen.
Abonneer op onze nieuwsbrief
Word lid van onze nieuwsbrief voor technische tips, recensies, gratis e-boeken en exclusieve deals!
Nog een stap…!
Bevestig uw e-mailadres in de e-mail die we u zojuist hebben gestuurd.