Dokumentation för Re-modulen för Python 3 i . Re modul för reguljära uttryck

Reguljära uttryck är en mycket populär komponent i nästan alla programmeringsspråk. De hjälper dig att snabbt komma åt den information du behöver. I synnerhet används de när det är nödvändigt att bearbeta text. Python kommer som standard med en speciell modul. re, som ansvarar för att arbeta med reguljära uttryck.

Idag kommer vi att prata i detalj om vad det är i allmänhet, hur man arbetar med dem och hur modulen re kommer att hjälpa.

Reguljära uttryck: en introduktion

Vad är användningen av reguljära uttryck? Nästan alla. Till exempel dessa:

  1. Webbapplikationer som kräver textvalidering. Ett typiskt exempel är e-postklienter online.
  2. Eventuella andra projekt relaterade till texter, databaser och så vidare.

Innan vi börjar analysera syntaxen bör vi förstå de grundläggande principerna för bibliotekets funktion mer i detalj re och i allmänhet vad som är bra med det i allmänhet. Vi kommer också att ge exempel från verklig praxis, där vi kommer att beskriva mekanismen för deras användning. Du kan skapa en sådan mall, lämplig för dig att utföra en mängd olika operationer med text.

Vad är en mall i Re-biblioteket?

Med den kan du söka information av olika slag, få information motsvarande dem, för att göra andra funktioner mer anpassningsbara. Och, naturligtvis, att bearbeta dessa uppgifter.

Ta till exempel följande mall: s+. Det betyder vilket mellanslagstecken som helst. Om du lägger till ett plustecken till det betyder det att mönstret innehåller mer än ett mellanslag. Det kan till och med matcha tabbtecken som anropas med t+.

Innan du använder dem måste du importera biblioteket Re. Efter det använder vi ett speciellt kommando för att kompilera mallen. Detta görs i två steg.

>>> import ang

>>> regex = re.compile('s+')

Specifikt utför den här koden operationen att kompilera en mall som kan användas. till exempel för att söka efter mellanslag (ett eller flera).

Få separat information från olika strängar med hjälp av reguljära uttryck

Anta att vi har en variabel som innehåller följande information.

>>> text = “””100 INF Informatik

213 MAT Matematik  

156 ENG engelska»»»

Den innehåller tre utbildningar. Var och en av dem består av tre delar – nummer, kod och namn. Vi ser att intervallet mellan dessa ord är olika. Vad ska man göra för att dela upp denna rad i separata siffror och ord? Det finns två metoder för att uppnå detta mål:

  1. anropa en funktion re.split.
  2. tillämpa funktionen delas för regex.

Här är ett exempel på hur man använder syntaxen för var och en av metoderna för vår variabel.

>>> re.split('s+', text)  

# eller

>>> regex.split(text)

Utdata: ['100', 'INF', 'Datavetenskap', '213', 'MAT', 'Math', '156', 'ENG', 'engelska']

I allmänhet kan båda metoderna användas. Men det är faktiskt mycket lättare att använda ett reguljärt uttryck istället för att använda funktionen flera gånger. re.split.

Hitta matchningar med tre funktioner

Låt oss säga att vi bara behöver extrahera siffror från en sträng. Vad behöver göras för detta?

re.findall()

Här är ett användningsfall för funktionen hitta alla(), som tillsammans med reguljära uttryck låter dig extrahera förekomster av ett eller flera tal från en textvariabel.

>>> print(text)  

100 INF Informatik

213 MAT Matematik  

156 SWE Engelska

>>> regex_num = re.compile('d+')  

>>> regex_num.findall(text)  

['100', '213', '156']

Tillsammans med d-symbolen använde vi en mall som anger absolut vilket numeriskt värde som helst i en variabel eller text. Och eftersom vi lagt till ett + där betyder det att minst ett nummer måste finnas. 

Du kan också använda tecknet * för att ange att närvaron av en siffra inte krävs för att en matchning ska hittas.

Men i vårt fall, eftersom vi använde +, extraherade vi med hitta alla() 1 eller flera digitala beteckningar på kurser från texten. I vårt fall fungerar alltså reguljära uttryck som inställningar för funktionen.

re.search() vs returmatch()

Som du kan gissa från namnet på funktionerna, söker den första efter en matchning i texten. Fråga: Vad är skillnaden mellan hitta alla? Poängen är att den returnerar ett specifikt objekt som matchar mönstret, och inte hela sekvensen av hittade resultat i form av en lista, som föregående funktion.

I sin tur gör re.match-funktionen samma sak. Bara syntaxen är annorlunda. Mallen måste placeras i början. 

Låt oss ta ett exempel som visar detta.

>>> # skapa en variabel med text

>>> text2 = «»»INF Informatik

213 MAT Mathematics 156″»»  

>>> # kompilera regex och leta efter mönster

>>> regex_num = re.compile('d+')  

>>> s = regex_num.search(text2)  

>>> print('Första index: ', s.start())  

>>> print('Sista index: ', s.end())  

>>> print(text2[s.start():s.end()]) 

Första index: 17 

Senaste index: 20

213

Om du vill få ett liknande resultat på ett annat sätt kan du använda funktionen grupp().

Ersätter en del av texten med Re-bibliotek

För att ersätta text, använd funktionen re.sub(). Anta att vår lista över kurser har förändrats lite. Vi ser att efter varje digitalt värde har vi en flik. Vår uppgift är att kombinera all denna sekvens till en rad. För att göra detta måste vi ersätta uttrycket s+ att passera 

Originaltexten var:

# skapa en variabel med text

>>> text = “””100 INF t Informatik

213 MAT t Matematik  

156 ENG t engelska»»»  

>>> print(text)  

100 INFO informatik

213 XNUMX XNUMX MAT Matematik  

156 ANG Engelska

För att utföra önskad operation använde vi följande kodrader.

# ersätt ett eller flera mellanslag med 1

>>> regex = re.compile('s+')  

>>> print(regex.sub(' ', text))  

Som ett resultat har vi en rad. 

101 COM-datorer 205 MAT Matematik 189 SWE Engelska

Tänk nu på ett annat problem. Vi står inte inför uppgiften att sätta utrymmen. Det är mycket viktigare för oss att alla kursnamn börjar på en ny rad. För att göra detta används ett annat uttryck som lägger till en ny rad till undantaget. Vad är detta för uttryck?

Bibliotek Re stöder en funktion som negativ matchning. Den skiljer sig från den direkta genom att den innehåller ett utropstecken före snedstrecket. Det vill säga, om vi behöver hoppa över nyradstecknet, måste vi skriva !n istället för n.

Vi får följande kod.

# ta bort alla blanksteg utom nyrad  

>>> regex = re.compile('((?!n)s+)')  

>>> print(regex.sub(' ', text))  

100 INF Informatik

213 MAT Matematik  

156 SWE Engelska

Vad är reguljära uttrycksgrupper?

Med hjälp av grupper av reguljära uttryck kan vi få de önskade objekten i form av separata element, och inte på en rad. 

Anta att vi behöver få kursnummer, kod och namn inte på en rad, utan som separata element. För att slutföra uppgiften måste du skriva ett stort antal onödiga rader kod. 

Faktum är att uppgiften kan förenklas avsevärt. Du kan kompilera mallen för alla poster och bara ange vilken data du behöver för att få från parentes.

Det kommer att finnas ett mycket litet antal rader. 

# skapa grupper av kurstextmallar och extrahera dem

>>> course_pattern = '([0-9]+)s*([A-ZY]{3})s*([a-zA-ZoY]{4,})'  

>>> re.findall(course_pattern, text)  

[('100', 'INF', 'Datavetenskap'), ('213', 'MAT', 'Math'), ('156', 'ENG', 'engelska')]

Konceptet med "girig" matchning

Som standard programmeras reguljära uttryck för att extrahera den maximala mängden matchande data. Och även om du behöver mycket mindre.

Låt oss titta på ett exempel på HTML-kod där vi behöver hämta taggen.

>>> text = "Exempel på girig matchning av reguljära uttryck"  

>>> re.findall('', text)  

['Exempel på girig matchning av reguljära uttryck']

Istället för att bara extrahera en tagg fick Python hela strängen. Det är därför det kallas girigt.

Och vad ska man göra för att bara få taggen? I det här fallet måste du använda lat matchning. För att specificera ett sådant uttryck läggs ett frågetecken till i slutet av mönstret.

Du kommer att få följande kod och utdata från tolken.

>>> re.findall('', text)  

[", "]

Om det krävs för att bara få den första påträffade förekomsten används metoden Sök ().

re.search('', text).group()  

"

Då kommer bara öppningstaggen att hittas.

Populära uttrycksmallar

Här är en tabell som innehåller de vanligast använda mönstren för reguljära uttryck.

Dokumentation för Re-modulen för Python 3 i . Re modul för reguljära uttryck

Slutsats

Vi har bara övervägt de mest grundläggande metoderna för att arbeta med reguljära uttryck. Du har i alla fall sett hur viktiga de är. Och här spelar det ingen roll om det är nödvändigt att analysera hela texten eller dess enskilda fragment, om det är nödvändigt att analysera ett inlägg på ett socialt nätverk eller samla in data för att bearbeta det senare. Reguljära uttryck är en pålitlig hjälpare i denna fråga.

De låter dig utföra uppgifter som:

  1. Ange formatet för data, till exempel en e-postadress eller ett telefonnummer.
  2. Skaffa ett snöre och dela det i flera mindre strängar.
  3. Utför olika operationer med text, som att söka, extrahera nödvändig information eller byta ut delar av tecknen.

Reguljära uttryck låter dig också utföra icke-triviala operationer. Vid första anblicken är det inte lätt att bemästra denna vetenskap. Men i praktiken är allt standardiserat, så det räcker att ta reda på det en gång, varefter det här verktyget kan användas inte bara i Python, utan också i vilket annat programmeringsspråk som helst. Även Excel använder reguljära uttryck för att automatisera databehandling. Så det är synd att inte använda det här verktyget.

Kommentera uppropet