Regelbundna uttryck i Python

Har du någonsin undrat vad nyckeln är till upptäckt lite text i ett dokument, eller se till att en text överensstämmer till något format, till exempel en e-postadress och andra liknande operationer?

Nyckeln till sådana operationer är reguljära uttryck (regex). Låt oss se några definitioner för reguljära uttryck. I Wikipedia definieras regex enligt följande:

En sekvens av tecken som definierar ett sökmönster, huvudsakligen för användning i mönstermatchning med strängar eller strängmatchning, dvs "hitta och ersätt" -liknande operationer. Konceptet uppstod under 1950-talet när den amerikanska matematikern Stephen Kleene formaliserade beskrivningen av ett vanligt språk och kom till vanligt bruk med Unix-textbehandlingsverktygen ed, en redaktör och grep, ett filter.

En annan fin definition från regular-expressions.info är:

Ett regelbundet uttryck (regex eller regexp för kort) är en speciell textsträng för att beskriva ett sökmönster. Du kan tänka på reguljära uttryck som joker på steroider. Du är förmodligen bekant med jokerteckennoteringar som * .txt för att hitta alla textfiler i en filhanterare. Regex ekvivalent är. * \. Txt $

Jag vet att begreppet regelbundna uttryck fortfarande kan låta lite vagt. Så, låt oss titta på några exempel på regex för att förstå konceptet bättre.

Exempel på regelbundna uttryck

I det här avsnittet ska jag visa några exempel på regex för att hjälpa dig att förstå konceptet ytterligare.

Säg att du hade den här regexen:

/ Abder /

Detta berättar helt enkelt oss att matcha ordet Abder endast.

Vad sägs om denna regex?

/ A [nr] t /

Du kan läsa denna regex enligt följande: hitta ett textmönster så att första bokstaven är en och den sista bokstaven är t, och mellan dessa bokstäver kommer antingen n eller r. Så matchande ord är myra och konst.

Låt mig ge dig en liten frågesport på denna punkt. Hur skulle du skriva ett regelbundet uttryck som börjar med ca, och slutar med en eller alla följande tecken TBR? Ja, den här regexen kan skrivas enligt följande:

/ Ca [tbr] /

Om du ser en regex som börjar med en circumflex-accent ^, det här betyder att matcha strängen som börjar med strängen som nämns efter ^. Så, om du hade regexen nedan, matchar den strängen som börjar med Detta.

/ ^ Detta /

Således i följande sträng:

Jag heter Abder Detta är Abder Detta är Tom

Baserat på regex / ^ Detta /, Följande strängar kommer att matchas:

Detta är Abder Detta är Tom

Vad händer om vi ville matcha en sträng som ändarna med någon sträng? I det här fallet använder vi dollartecknet $. Här är ett exempel:

Abder $

Således, i ovanstående sträng (de tre linjerna), skulle följande mönster matchas med användning av denna regex:

Jag heter Abder Detta är Abder

Tja, vad tycker du om den här regexen??

^ [A-Z] [a-z]

Jag vet att det kan tyckas komplicerat vid första anblicken, men låt oss gå igenom det bit för bit.

Vi såg redan vad en circumflex accent ^ är. Det betyder att matcha en sträng som börjar med en viss sträng. [A-Z] hänvisar till stortexten. Så, om vi läser den här delen av regexen: ^ [A-Z], det berättar att vi matchar strängen som börjar med en stor bokstav. Den sista delen, [A-z], betyder att efter att ha hittat en sträng som börjar med en stor bokstav, skulle den följas av små bokstäver från alfabetet.

Så, vilken av följande strängar kommer att matchas med denna regex? Om du inte är säker kan du använda Python som vi kommer att se i nästa avsnitt för att testa ditt svar.

Abder Abder ABDER ABder

Regelbundna uttryck är ett mycket brett ämne, och dessa exempel är bara för att ge dig en känsla för vad de är och varför vi använder dem. 

En bra referens för att lära dig mer om reguljära uttryck och se fler exempel är RexEgg.

Regelbundna uttryck i Python

Låt oss nu komma till den roliga delen. Vi vill se hur vi arbetar med några av ovanstående reguljära uttryck i Python. Modulen vi ska använda för att arbeta med reguljära uttryck i Python är re modul.

Det första exemplet handlade om att hitta ordet Abder. I Python skulle vi göra det enligt följande:

importera re text = 'Jag heter Abder' match_pattern = re.match (r'Abder ', text) print match_pattern

Om du kör det ovanstående Python-skriptet får du utmatningen: Ingen!

Skriptet fungerar bra, men frågan är hur funktionen fungerar match() Arbetar. Om vi ​​återvänder till re modul dokumentation, detta är vad funktionen match() gör:

Om noll eller flera tecken i början av strängen matchar det vanliga uttrycksmönstret, returnera ett motsvarande matchobjekt. Returnera Ingen om strängen inte matchar mönstret; Observera att detta skiljer sig från en nolllängdskamp.

Aha, från det här kan vi se det match() kommer bara att returnera ett resultat om det hittade en match på början av strängen.

Vi kan istället använda funktionen Sök(), vilket är baserat på dokumentationen:

Skanna igenom strängen och leta efter den första platsen där det reguljära uttrycksmönstret ger en match och returnera ett motsvarande matchobjekt. Returnera Ingen om ingen position i strängen matchar mönstret; Observera att detta skiljer sig från att hitta en noll längd match vid någon punkt i strängen.

Så, om vi skriver ovanstående script, men med Sök() istället för match(), vi får följande utdata:

<_sre.SRE_Match object at 0x101cfc988>

Det är en matchobjekt har återlämnats.

Om vi ​​vill returnera resultatet (strängmatchning) använder vi grupp() fungera. Om vi ​​vill se hela matchen använder vi grupp (0). Således:

skriv ut match_pattern.group (0)

kommer att returnera utgången: Abder.

Om vi ​​tar den andra regexen i föregående avsnitt, så är det / A [nr] t /, det kan skrivas i python enligt följande:

import re text = 'Detta är en svart myr' match_pattern = re.search (r'a [nr] t ', text) print match_pattern.group (0)

Utdata för detta skript är: myra.

Slutsats

Artikeln blir längre, och ämnet för reguljära uttryck i Python tar säkert mer än en artikel, om inte en bok i sig. 

Denna artikel är dock att ge dig en snabb start och förtroende för att komma in i världen med vanliga uttryck i Python. Du kan hänvisa till re dokumentation för att lära sig mer om den här modulen och hur man går djupare i ämnet.