Dokumentation for Re-modulet til Python 3 i . Re modul til regulære udtryk

Regulære udtryk er en meget populær komponent i næsten ethvert programmeringssprog. De hjælper dig med hurtigt at få adgang til de oplysninger, du har brug for. De bruges især, når det er nødvendigt at behandle tekst. Python leveres som standard med et specielt modul. re, som har ansvaret for at arbejde med regulære udtryk.

I dag vil vi tale i detaljer om, hvad det er generelt, hvordan man arbejder med dem, og hvordan modulet re vil hjælpe.

Regulære udtryk: en introduktion

Hvad er brugen af ​​regulære udtryk? Næsten alle. For eksempel disse:

  1. Webapplikationer, der kræver tekstvalidering. Et typisk eksempel er online mailklienter.
  2. Eventuelle andre projekter relateret til tekster, databaser og så videre.

Før vi begynder at analysere syntaksen, bør vi forstå mere detaljeret de grundlæggende principper for bibliotekets funktion re og generelt, hvad er generelt godt ved det. Vi vil også give eksempler fra virkelig praksis, hvor vi vil beskrive mekanismen for deres brug. Du kan oprette en sådan skabelon, der passer til dig til at udføre en bred vifte af handlinger med tekst.

Hvad er en skabelon i Re-biblioteket?

Med den kan du søge efter information af forskellige typer, få information, der svarer til dem, for at gøre andre funktioner mere adaptive. Og selvfølgelig at behandle disse data.

Tag for eksempel følgende skabelon: s+. Det betyder ethvert mellemrumstegn. Hvis du tilføjer et plustegn til det, betyder det, at mønsteret indeholder mere end et mellemrum. Det kan endda matche tabulatortegn, der kaldes med t+.

Før du bruger dem, skal du importere biblioteket Re. Derefter bruger vi en speciel kommando til at kompilere skabelonen. Dette gøres i to trin.

>>> import vedr

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

Specifikt udfører denne kode operationen med at kompilere en skabelon, der kan bruges. for eksempel at søge efter mellemrum (et eller flere).

Få adskilt information fra forskellige strenge ved hjælp af regulære udtryk

Antag, at vi har en variabel, der indeholder følgende information.

>>> tekst = “””100 INF Informatik

213 MAT Matematik  

156 ENG Engelsk»»»

Den indeholder tre uddannelsesforløb. Hver af dem består af tre dele - nummer, kode og navn. Vi ser, at intervallet mellem disse ord er forskelligt. Hvad skal man gøre for at opdele denne linje i separate tal og ord? Der er to metoder til at nå dette mål:

  1. kalde en funktion re.split.
  2. anvende funktion delt forum regulært udtryk.

Her er et eksempel på brug af syntaksen for hver af metoderne til vores variabel.

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

# eller

>>> regex.split(tekst)

Output: ['100', 'INF', 'Computer Science', '213', 'MAT', 'Math', '156', 'ENG', 'English']

Generelt kan begge metoder bruges. Men det er faktisk meget nemmere at bruge et regulært udtryk i stedet for at bruge funktionen flere gange. re.split.

Find matcher med tre funktioner

Lad os sige, at vi kun skal udtrække tal fra en streng. Hvad skal der gøres for dette?

re.findall()

Her er en use case for funktionen findall(), som sammen med regulære udtryk giver dig mulighed for at udtrække forekomster af et eller flere tal fra en tekstvariabel.

>>> print(tekst)  

100 INF Informatik

213 MAT Matematik  

156 ENG Engelsk

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

>>> regex_num.findall(tekst)  

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

Sammen med d-symbolet brugte vi en skabelon, der angiver absolut enhver numerisk værdi placeret i en variabel eller tekst. Og da vi tilføjede et + der, betyder det, at der skal være mindst ét ​​tal til stede. 

Du kan også bruge *-tegnet til at angive, at tilstedeværelsen af ​​et ciffer ikke er påkrævet for at finde et match.

Men i vores tilfælde, da vi brugte +, ekstraherede vi med findall() 1 eller flere digitale betegnelser af kurser fra teksten. I vores tilfælde fungerer regulære udtryk således som indstillinger for funktionen.

re.search() vs re.match()

Som du kan gætte ud fra navnet på funktionerne, søger den første efter et match i teksten. Spørgsmål: Hvad er forskellen på finde alt? Pointen er, at den returnerer et bestemt objekt, der matcher mønsteret, og ikke hele sekvensen af ​​fundne resultater i form af en liste, som den forrige funktion.

Til gengæld gør re.match-funktionen det samme. Kun syntaksen er anderledes. Skabelonen skal placeres i begyndelsen. 

Lad os tage et eksempel, der viser dette.

>>> # opret en variabel med tekst

>>> text2 = «»»INF Informatik

213 MAT Mathematics 156″»»  

>>> # kompiler regulært udtryk og se efter mønstre

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

>>> s = regex_num.search(text2)  

>>> print('Første indeks: ', s.start())  

>>> print('Sidste indeks: ', s.end())  

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

Første indeks: 17 

Sidste indeks: 20

213

Hvis du ønsker at få et lignende resultat på en anden måde, kan du bruge funktionen gruppe().

Udskiftning af en del af teksten med Re-bibliotek

For at erstatte tekst, brug funktionen re.sub(). Antag, at vores liste over kurser har ændret sig lidt. Vi ser, at vi efter hver digital værdi har en fane. Vores opgave er at kombinere hele denne sekvens i én linje. For at gøre dette skal vi erstatte udtrykket s+ at passere 

Den originale tekst var:

# opret en variabel med tekst

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

213 MAT t Matematik  

156 ENG t engelsk»»»  

>>> print(tekst)  

100 INFO Computer science

213 MAT Matematik  

156 ANG Engelsk

For at udføre den ønskede operation brugte vi følgende kodelinjer.

# udskift et eller flere mellemrum med 1

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

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

Som et resultat har vi én linje. 

101 COM Computere 205 MAT Matematik 189 ENG Engelsk

Overvej nu et andet problem. Vi står ikke over for opgaven med at sætte mellemrum. Det er meget vigtigere for os, at alle kursusnavne starter på en ny linje. For at gøre dette bruges et andet udtryk, der tilføjer en ny linje til undtagelsen. Hvad er det for et udtryk?

Bibliotek Re understøtter en funktion såsom negativ matching. Den adskiller sig fra den direkte ved, at den indeholder et udråbstegn før skråstreg. Det vil sige, at hvis vi skal springe nylinjetegnet over, så skal vi skrive !n i stedet for n.

Vi får følgende kode.

# fjern alle mellemrum undtagen ny linje  

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

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

100 INF Informatik

213 MAT Matematik  

156 ENG Engelsk

Hvad er regulære udtryksgrupper?

Ved hjælp af grupper af regulære udtryk kan vi få de ønskede objekter i form af separate elementer, og ikke i én linje. 

Antag, at vi ikke skal have kursusnummer, kode og navn på én linje, men som separate elementer. For at fuldføre opgaven skal du skrive et stort antal unødvendige kodelinjer. 

Faktisk kan opgaven forenkles meget. Du kan kompilere skabelonen for alle poster og blot angive de data, du skal hente fra parenteserne.

Der vil være et meget lille antal linjer. 

# opret grupper af kursustekstskabeloner og udtræk dem

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

>>> re.findall(kursusmønster, tekst)  

[('100', 'INF', 'Computer Science'), ('213', 'MAT', 'Math'), ('156', 'ENG', 'English')]

Konceptet med "grådig" matchning

Som standard er regulære udtryk programmeret til at udtrække den maksimale mængde matchende data. Og selvom du har brug for meget mindre.

Lad os se på et eksempel på en HTML-kode, hvor vi skal hente tagget.

>>> text = "Eksempel på grådig matchning af regulære udtryk"  

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

['Eksempel på grådig matchning af regulære udtryk']

I stedet for kun at udtrække ét tag, fik Python hele strengen. Derfor kaldes det grådig.

Og hvad skal man gøre for kun at få tagget? I dette tilfælde skal du bruge doven matching. For at angive et sådant udtryk tilføjes et spørgsmålstegn til slutningen af ​​mønsteret.

Du får følgende kode og tolkens output.

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

[", "]

Hvis det er nødvendigt kun at få den første stødte forekomst, så bruges metoden Søg ().

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

"

Så vil kun åbningsmærket blive fundet.

Populære udtryksskabeloner

Her er en tabel, der indeholder de mest almindeligt anvendte regulære udtryksmønstre.

Dokumentation for Re-modulet til Python 3 i . Re modul til regulære udtryk

Konklusion

Vi har kun overvejet de mest basale metoder til at arbejde med regulære udtryk. Under alle omstændigheder har du set, hvor vigtige de er. Og her gør det ingen forskel, om det er nødvendigt at parse hele teksten eller dens individuelle fragmenter, om det er nødvendigt at analysere et opslag på et socialt netværk eller indsamle data for at kunne behandle det senere. Regelmæssige udtryk er en pålidelig hjælper i denne sag.

De giver dig mulighed for at udføre opgaver som:

  1. Angivelse af formatet på dataene, såsom en e-mailadresse eller et telefonnummer.
  2. At få en streng og dele den i flere mindre strenge.
  3. Udfør forskellige handlinger med tekst, såsom at søge, udtrække de nødvendige oplysninger eller udskifte en del af tegnene.

Regulære udtryk giver dig også mulighed for at udføre ikke-trivielle operationer. Ved første øjekast er det ikke let at mestre denne videnskab. Men i praksis er alt standardiseret, så det er nok at finde ud af det én gang, hvorefter dette værktøj kan bruges ikke kun i Python, men også i ethvert andet programmeringssprog. Selv Excel bruger regulære udtryk til at automatisere databehandling. Så det er synd ikke at bruge dette værktøj.

Giv en kommentar