Python RegEx: re.match(), re.search(), re.findall() met voorbeeld
Wat is reguliere expressie in Python?
A Reguliere expressie (RE) in een programmeertaal is een speciale tekstreeks die wordt gebruikt voor het beschrijven van een zoekpatroon. Het is uiterst handig voor het extraheren van informatie uit tekst zoals code, bestanden, logboeken, spreadsheets of zelfs documenten.
Tijdens het gebruik van de Python Reguliere expressie Het eerste wat we moeten herkennen is dat alles in wezen een teken is, en dat we patronen schrijven die overeenkomen met een specifieke reeks tekens, ook wel string genoemd. Ascii- of Latijnse letters zijn de letters die op uw toetsenborden staan en Unicode wordt gebruikt om de buitenlandse tekst te matchen. Het bevat cijfers en leestekens en alle speciale tekens zoals $#@!%, enz.
Bijvoorbeeld, een Python Reguliere expressie zou een programma kunnen vertellen om naar specifieke tekst in de string te zoeken en vervolgens het resultaat dienovereenkomstig af te drukken. Expressie kan omvatten
- Tekstmatching
- Herhaling
- vertakking
- Patroon-compositie enz.
Reguliere expressie of RegEx in Python wordt aangegeven als RE (RE's, regexes of regex-patroon) worden geïmporteerd via re-module. Python ondersteunt reguliere expressie via bibliotheken. RegEx in Python ondersteunt verschillende dingen zoals Modificaties, identificaties en witruimtetekens.
Identifiers | modifiers | Witte ruimtetekens | Ontsnappen vereist |
---|---|---|---|
\d= elk getal (een cijfer) | \d vertegenwoordigt een cijfer. Bijv.: \d{1,5} het zal een cijfer tussen 1,5 declareren, zoals 424,444,545 enz. | \n = nieuwe regel | . + * ? [] $ ^ () {} | \ |
\D= alles behalve een getal (een niet-cijferig) | + = komt overeen met 1 of meer | \s= spatie | |
\s = spatie (tab, spatie, nieuwe regel etc.) |
? = komt overeen met 0 of 1 | \t = tabblad | |
\S= alles behalve een spatie | * = 0 of meer | \e = ontsnappen | |
\w = letters ( Komt overeen met alfanumerieke tekens, inclusief “_”) | $ komt overeen met het einde van een tekenreeks | \r = regelterugloop | |
\W =alles behalve letters ( Komt overeen met een niet-alfanumeriek teken, exclusief “_”) | ^ match het begin van een string | \f= formulierfeed | |
. = alles behalve letters (punten) | | komt overeen met een van beide of x/y | ------ | |
\b = elk teken behalve nieuwe regel | [] = bereik of “variantie” | ------ | |
\. | {x} = dit aantal voorgaande code | ------ |
Reguliere expressie(RE)-syntaxis
import re
- “re”-module meegeleverd Python voornamelijk gebruikt voor het zoeken naar en manipuleren van strings
- Wordt ook vaak gebruikt voor webpagina's “Schrapen” (grote hoeveelheid gegevens uit websites halen)
We beginnen de expressie-tutorial met deze eenvoudige oefening door de expressies (w+) en (^) te gebruiken.
Voorbeeld van w+ en ^-expressie
- “^”: Deze expressie komt overeen met het begin van een tekenreeks
- “w+“: Deze expressie komt overeen met het alfanumerieke teken in de tekenreeks
Hier zien we A Python RegEx Voorbeeld van hoe we w+ en ^ expressie in onze code kunnen gebruiken. We behandelen de functie re.findall() in Python, later in deze tutorial, maar voor nu concentreren we ons eenvoudigweg op de uitdrukkingen \w+ en \^.
Als we bijvoorbeeld voor onze string “guru99, education is fun” de code uitvoeren met w+ en^, zal dit de uitvoer “guru99” opleveren.
import re xx = "guru99,education is fun" r1 = re.findall(r"^\w+",xx) print(r1)
Onthoud dat als u het +teken uit de w+ verwijdert, de uitvoer zal veranderen en alleen het eerste teken van de eerste letter zal weergeven, dat wil zeggen [g]
Voorbeeld van \s-expressie in de functie re.split
- “s”: Deze uitdrukking wordt gebruikt om een spatie in de string te creëren
Om te begrijpen hoe deze RegEx in Python werkt, beginnen we met een simpele Python RegEx Voorbeeld van een splitsfunctie. In het voorbeeld hebben we elk woord gesplitst met behulp van de functie “re.split” en tegelijkertijd hebben we expressie \s gebruikt waarmee elk woord in de string afzonderlijk kan worden geparseerd.
Wanneer u deze code uitvoert, krijgt u de uitvoer ['wij', 'zijn', 'splitting', 'de', 'woorden'].
Laten we nu eens kijken wat er gebeurt als u “\” uit s verwijdert. Er is geen 's'-alfabet in de uitvoer, dit komt omdat we '\' uit de string hebben verwijderd, en het evalueert “s” als een normaal teken en dus splitst de woorden waar het “s” in de string vindt.
Op dezelfde manier zijn er reeksen van andere Python reguliere expressie die u op verschillende manieren kunt gebruiken Python zoals \d,\D,$,\.,\b, etc.
Hier is de volledige code
import re xx = "guru99,education is fun" r1 = re.findall(r"^\w+", xx) print((re.split(r'\s','we are splitting the words'))) print((re.split(r's','split the words')))
Vervolgens gaan we kijken naar de soorten methoden die worden gebruikt met reguliere expressies Python.
Reguliere expressiemethoden gebruiken
Het “re”-pakket biedt verschillende methoden om daadwerkelijk query's uit te voeren op een invoerreeks. We zullen de methoden van re-in zien Python:
- opnieuw match()
- onderzoek()
- her.findall()
Note: Gebaseerd op de reguliere expressies, Python biedt twee verschillende primitieve bewerkingen. De match-methode controleert alleen op een match aan het begin van de string, terwijl search controleert op een match ergens in de string.
opnieuw match()
opnieuw match() functie van opnieuw in Python zal het reguliere expressiepatroon doorzoeken en de eerste instantie retourneren. De Python De RegEx Match-methode controleert alleen op een overeenkomst aan het begin van de tekenreeks. Dus als er een match wordt gevonden op de eerste regel, wordt het matchobject geretourneerd. Maar als er een match wordt gevonden in een andere regel, wordt de Python RegEx Match-functie retourneert null.
Beschouw bijvoorbeeld de volgende code van Python re.match() functie. De uitdrukkingen “w+” en “\W” komen overeen met de woorden die beginnen met de letter 'g'. Daarna wordt alles wat niet begint met 'g' niet geïdentificeerd. Om de overeenkomst voor elk element in de lijst of string te controleren, voeren we hierin de forloop uit Python re.match() Voorbeeld.
re.search(): Patroon in tekst vinden
onderzoek() De functie doorzoekt het reguliere-expressiepatroon en retourneert het eerste exemplaar. In tegenstelling tot Python re.match(), zal het alle regels van de invoerreeks controleren. De Python De functie re.search() retourneert een matchobject wanneer het patroon wordt gevonden en “null” als het patroon niet wordt gevonden
Hoe zoek() gebruiken?
Om de zoek()-functie te gebruiken, moet u importeren Python re-module eerst en voer vervolgens de code uit. De Python De functie re.search() gebruikt het “patroon” en de “tekst” om vanuit onze hoofdreeks te scannen
Hier zoeken we bijvoorbeeld naar twee letterlijke strings “Software testen” “guru99”, in een tekststring “Software Testen is leuk”. Voor “softwaretesten” hebben we de match gevonden en daarom wordt de uitvoer ervan geretourneerd Python re.search() Voorbeeld als “een match gevonden”, terwijl we voor het woord “guru99” de string niet konden vinden en daarom wordt de uitvoer geretourneerd als “Geen match”.
her.findall()
vind alle() module wordt gebruikt om te zoeken naar “alle” exemplaren die overeenkomen met een bepaald patroon. De module search() retourneert daarentegen alleen het eerste exemplaar dat overeenkomt met het opgegeven patroon. findall() herhaalt alle regels van het bestand en retourneert alle niet-overlappende patroonovereenkomsten in één stap.
Hoe re.findall() te gebruiken in Python?
Hier hebben we een lijst met e-mailadressen en we willen dat alle e-mailadressen uit de lijst worden opgehaald. We gebruiken hiervoor de methode re.findall() Python. Het vindt alle e-mailadressen uit de lijst.
Hier is de volledige code voor het voorbeeld van re.findall()
import re list = ["guru99 get", "guru99 give", "guru Selenium"] for element in list: z = re.match("(g\w+)\W(g\w+)", element) if z: print((z.groups())) patterns = ['software testing', 'guru99'] text = 'software testing is fun?' for pattern in patterns: print('Looking for "%s" in "%s" ->' % (pattern, text), end=' ') if re.search(pattern, text): print('found a match!') else: print('no match') abc = 'guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com' emails = re.findall(r'[\w\.-]+@[\w\.-]+', abc) for email in emails: print(email)
Python Vlaggen
Veel Python Regex-methoden en Regex-functies gebruiken een optioneel argument genaamd Flags. Deze vlaggen kunnen de betekenis van het gegeven wijzigen Python Regex-patroon. Om deze te begrijpen zullen we een of twee voorbeelden van deze vlaggen zien.
Diverse vlaggen gebruikt Python omvat
Syntaxis voor Regex-vlaggen | Wat doet deze vlag? |
---|---|
[re.M] | Zorg ervoor dat begin/eind elke regel in overweging neemt |
[re.I] | Het negeert de casus |
[re.S] | Maken [ . ] |
[re.U] | Zorg ervoor dat { \w,\W,\b,\B} de Unicode-regels volgt |
[re.L] | Zorg ervoor dat {\w,\W,\b,\B} de landinstelling volgt |
[re.X] | Commentaar toestaan in Regex |
Voorbeeld van re.M- of multiline-vlaggen
In multiline komt het patroonkarakter [^] overeen met het eerste karakter van de string en het begin van elke regel (direct volgend op elke nieuwe regel). Terwijl expressie small “w” wordt gebruikt om de spatie met karakters te markeren. Wanneer u de code uitvoert, print de eerste variabele “k1” alleen het karakter 'g' voor word guru99, terwijl wanneer u multiline flag toevoegt, het de eerste karakters van alle elementen in de string ophaalt.
Hier is de code
import re xx = """guru99 careerguru99 selenium""" k1 = re.findall(r"^\w", xx) k2 = re.findall(r"^\w", xx, re.MULTILINE) print(k1) print(k2)
- We hebben de variabele xx gedeclareerd voor de string "guru99…. careerguru99….selenium"
- Voer de code uit zonder vlaggen op meerdere regels te gebruiken, het geeft de uitvoer alleen 'g' van de regels
- Voer de code uit met vlag "multiline", wanneer u 'k2' afdrukt, wordt de uitvoer weergegeven als 'g', 'c' en 's'
- Het verschil kunnen we dus zien na en vóór het toevoegen van meerdere regels in het bovenstaande voorbeeld.
Op dezelfde manier kunt u ook andere gebruiken Python vlaggen zoals re.U (Unicode), re.L (Volg landinstelling), re.X (Commentaar toestaan), enz.
Python 2 Voorbeeld
Bovenstaande codes zijn Python 3 voorbeelden, als je wilt binnenlopen Python 2. Houd rekening met de volgende code.
# Example of w+ and ^ Expression import re xx = "guru99,education is fun" r1 = re.findall(r"^\w+",xx) print r1 # Example of \s expression in re.split function import re xx = "guru99,education is fun" r1 = re.findall(r"^\w+", xx) print (re.split(r'\s','we are splitting the words')) print (re.split(r's','split the words')) # Using re.findall for text import re list = ["guru99 get", "guru99 give", "guru Selenium"] for element in list: z = re.match("(g\w+)\W(g\w+)", element) if z: print(z.groups()) patterns = ['software testing', 'guru99'] text = 'software testing is fun?' for pattern in patterns: print 'Looking for "%s" in "%s" ->' % (pattern, text), if re.search(pattern, text): print 'found a match!' else: print 'no match' abc = 'guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com' emails = re.findall(r'[\w\.-]+@[\w\.-]+', abc) for email in emails: print email # Example of re.M or Multiline Flags import re xx = """guru99 careerguru99 selenium""" k1 = re.findall(r"^\w", xx) k2 = re.findall(r"^\w", xx, re.MULTILINE) print k1 print k2
Test je Python Kennis
1. Welke methode wordt gebruikt om alle voorkomens van een patroon in een string te vinden?
- onderzoek()
- opnieuw match()
- her.findall()
- opnieuw splitsen()
2. Wat vertegenwoordigt de tekenklasse \d in reguliere expressies?
- Elk cijfer (0-9)
- Elk niet-cijferig teken
- Elk witruimteteken
- Elke letter of cijfer
3. Welke functie zou je gebruiken om een string te splitsen op basis van spaties?
- opnieuw splitsen(r'\s', string)
- re.findall(r'\w+', tekenreeks)
- re.match(r'\s+', tekenreeks)
- opnieuw splitsen(r'\w+', string)
4. Wat is het belangrijkste verschil tussen re.match() en re.search()?
- re.match() zoekt naar een patroon aan het begin van een string, terwijl re.search() ergens in de string naar een patroon zoekt.
- re.match() retourneert alle overeenkomsten, terwijl re.search() de eerste overeenkomst retourneert.
- re.search() is sneller dan re.match().
- Beide functies gedragen zich op dezelfde manier.
Samenvatting
Een reguliere expressie in a programmeertaal is een speciale tekstreeks die wordt gebruikt voor het beschrijven van een zoekpatroon. Het bevat cijfers en leestekens en alle speciale tekens zoals $#@!%, etc. De expressie kan letterlijke tekens bevatten
- Tekstmatching
- Herhaling
- vertakking
- Patroon-compositie enz.
In Python, wordt een reguliere expressie aangegeven als RE (RE's, regexes of regex-patroon) zijn ingebed Python re-module.
- “re”-module meegeleverd Python voornamelijk gebruikt voor het zoeken naar en manipuleren van strings
- Wordt ook vaak gebruikt voor het ‘scrapen’ van webpagina’s (grote hoeveelheden gegevens uit websites halen)
- Reguliere expressiemethoden omvatten re.match(),re.search()& re.findall()
- Overige Python RegEx-vervangingsmethoden zijn sub() en subn() die worden gebruikt om overeenkomende tekenreeksen in re te vervangen
- Python Vlaggen Veel Python Regex-methoden en Regex-functies gebruiken een optioneel argument genaamd Flags
- Deze vlaggen kunnen de betekenis van het gegeven Regex-patroon wijzigen
- Diverse Python vlaggen die in Regex-methoden worden gebruikt, zijn re.M, re.I, re.S, enz.