Dokumentasie vir die Re-module vir Python 3 in. Her module vir gereelde uitdrukkings

Gereelde uitdrukkings is 'n baie gewilde komponent van byna enige programmeertaal. Hulle help jou om vinnig toegang te verkry tot die inligting wat jy nodig het. Hulle word veral gebruik wanneer dit nodig is om teks te verwerk. Python kom by verstek met 'n spesiale module. re, wat verantwoordelik is om met gereelde uitdrukkings te werk.

Vandag sal ons in detail praat oor wat dit in die algemeen is, hoe om daarmee te werk en hoe die module re sal help.

Gereelde uitdrukkings: 'n inleiding

Wat is die gebruike van gereelde uitdrukkings? Amper almal. Byvoorbeeld, hierdie:

  1. Webtoepassings wat teksvalidering vereis. 'n Tipiese voorbeeld is aanlyn poskliënte.
  2. Enige ander projekte wat verband hou met tekste, databasisse en so meer.

Voordat ons die sintaksis begin ontleed, moet ons die basiese beginsels van die funksionering van die biblioteek in meer besonderhede verstaan re en in die algemeen, wat is oor die algemeen goed daaraan. Ons sal ook voorbeelde uit werklike praktyk gee, waar ons die meganisme van hul gebruik sal beskryf. Jy kan so 'n sjabloon skep wat geskik is vir jou om 'n wye verskeidenheid bewerkings met teks uit te voer.

Wat is 'n sjabloon in die Re-biblioteek?

Daarmee kan u verskillende soorte inligting soek, inligting kry wat daarmee ooreenstem, om ander funksies meer aanpasbaar te maak. En natuurlik om hierdie data te verwerk.

Neem byvoorbeeld die volgende sjabloon: s+. Dit beteken enige spasiekarakter. As jy 'n plusteken daarby voeg, beteken dit dat die patroon meer as een spasie insluit. Dit kan selfs ooreenstem met tabkarakters waarmee geroep word t+.

Voordat u dit gebruik, moet u die biblioteek invoer Re. Daarna gebruik ons ​​'n spesiale opdrag om die sjabloon saam te stel. Dit word in twee stappe gedoen.

>>> invoer t.o.v

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

Spesifiek, hierdie kode voer die operasie uit om 'n sjabloon saam te stel wat gebruik kan word. byvoorbeeld om na spasies (een of meer) te soek.

Kry aparte inligting van verskillende stringe deur gebruik te maak van gewone uitdrukkings

Gestel ons het 'n veranderlike wat die volgende inligting bevat.

>>> teks = “””100 INF Informatika

213 MAT Wiskunde  

156 ENG Engels»»»

Dit bevat drie opleidingskursusse. Elkeen van hulle bestaan ​​uit drie dele – nommer, kode en naam. Ons sien dat die interval tussen hierdie woorde verskil. Wat om te doen om hierdie lyn in aparte getalle en woorde op te breek? Daar is twee metodes om hierdie doel te bereik:

  1. roep 'n funksie herverdeel.
  2. funksie toepas verdeel vir regeks.

Hier is 'n voorbeeld van die gebruik van die sintaksis van elk van die metodes vir ons veranderlike.

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

# of

>>> regex.split(teks)

Uitset: ['100', 'INF', 'Rekenaarwetenskap', '213', 'MAT', 'Math', '156', 'ENG', 'Engels']

Oor die algemeen kan beide metodes gebruik word. Maar dit is eintlik baie makliker om 'n gewone uitdrukking te gebruik in plaas daarvan om die funksie verskeie kere te gebruik. herverdeel.

Soek pasmaats met drie funksies

Kom ons sê ons moet slegs getalle uit 'n string onttrek. Wat moet hiervoor gedoen word?

re.findall()

Hier is 'n gebruiksgeval vir die funksie findall(), wat, tesame met gereelde uitdrukkings, jou toelaat om voorkomste van een of meer getalle uit 'n teksveranderlike te onttrek.

>>> druk (teks)  

100 INF Informatika

213 MAT Wiskunde  

156 ENG Engels

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

>>> regex_num.findall(teks)  

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

Saam met die d-simbool het ons 'n sjabloon gebruik wat absoluut enige numeriese waarde aandui wat in 'n veranderlike of teks geleë is. En aangesien ons een + daar bygevoeg het, beteken dit dat ten minste een getal teenwoordig moet wees. 

Jy kan ook die * teken gebruik om te spesifiseer dat die teenwoordigheid van 'n syfer nie nodig is vir 'n passing om gevind te word nie.

Maar in ons geval, aangesien ons + gebruik het, het ons onttrek met findall() 1 of meer digitale benamings van kursusse uit die teks. Dus, in ons geval, dien gereelde uitdrukkings as instellings vir die funksie.

re.search() vs re.match()

Soos jy kan raai uit die naam van die funksies, soek die eerste vir 'n passing in die teks. Vraag: Wat is die verskil tussen alles vind? Die punt is dat dit 'n spesifieke voorwerp terugstuur wat by die patroon pas, en nie die hele volgorde van gevind resultate in die vorm van 'n lys, soos die vorige funksie nie.

Op sy beurt doen die re.match-funksie dieselfde. Net die sintaksis is anders. Die sjabloon moet aan die begin geplaas word. 

Kom ons neem 'n voorbeeld wat dit demonstreer.

>>> # skep 'n veranderlike met teks

>>> teks2 = «»»INF Informatika

213 MAT Wiskunde 156″»»  

>>> # stel regex saam en soek patrone

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

>>> s = regex_num.search(text2)  

>>> print('Eerste indeks: ', s.start())  

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

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

Eerste indeks: 17 

Laaste indeks: 20

213

As jy 'n soortgelyke resultaat op 'n ander manier wil kry, kan jy die funksie gebruik groep().

Vervang 'n deel van teks met Re-biblioteek

Om teks te vervang, gebruik die funksie re.sub(). Gestel ons lys kursusse het 'n bietjie verander. Ons sien dat ons na elke digitale waarde 'n oortjie het. Ons taak is om al hierdie volgorde in een lyn te kombineer. Om dit te doen, moet ons die uitdrukking s+ vervang om te slaag 

Die oorspronklike teks was:

# skep 'n veranderlike met teks

>>> teks = “””100 INF t Informatika

213 MAT t Wiskunde  

156 ENG t Engels»»»  

>>> druk (teks)  

100 INLIGTING informatika

213 XNUMX XNUMX XNUMX MAT Wiskunde  

156 ANG Inglese

Om die gewenste bewerking uit te voer, het ons die volgende reëls kode gebruik.

# vervang een of meer spasies met 1

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

>>> druk(regex.sub(' ', teks))  

As gevolg hiervan het ons een lyn. 

101 COM Rekenaars 205 MAT Wiskunde 189 ENG Engels

Oorweeg nou 'n ander probleem. Ons staan ​​nie voor die taak om spasies te plaas nie. Dit is vir ons baie belangriker dat alle kursusname op 'n nuwe reël begin. Om dit te doen, word 'n ander uitdrukking gebruik wat 'n nuwe reël by die uitsondering voeg. Watter soort uitdrukking is dit?

biblioteek Re ondersteun 'n kenmerk soos negatiewe passing. Dit verskil van die direkte een deurdat dit 'n uitroepteken voor die skuinsstreep bevat. Dit wil sê, as ons die nuwelynkarakter moet oorslaan, dan moet ons !n in plaas van n skryf.

Ons kry die volgende kode.

# verwyder alle spasies behalwe nuwe reël  

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

>>> druk(regex.sub(' ', teks))  

100 INF Informatika

213 MAT Wiskunde  

156 ENG Engels

Wat is gereelde uitdrukkingsgroepe?

Met behulp van groepe gereelde uitdrukkings kan ons die gewenste voorwerpe in die vorm van afsonderlike elemente kry, en nie in een lyn nie. 

Gestel ons moet die kursusnommer, kode en naam nie in een reël kry nie, maar as aparte elemente. Om die taak te voltooi, sal jy 'n groot aantal onnodige reëls kode moet skryf. 

Trouens, die taak kan baie vereenvoudig word. Jy kan die sjabloon vir alle inskrywings saamstel en net die data spesifiseer wat jy uit die hakies moet kry.

Daar sal 'n baie klein aantal lyne wees. 

# skep groepe van kursustekssjablone en onttrek dit

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

>>> re.findall(kursuspatroon, teks)  

[('100', 'INF', 'Rekenaarwetenskap'), ('213', 'MAT', 'Math'), ('156', 'ENG', 'Engels')]

Die konsep van "gierige" passing

Gereelde uitdrukkings word standaard geprogrammeer om die maksimum hoeveelheid bypassende data te onttrek. En selfs al het jy baie minder nodig.

Kom ons kyk na 'n voorbeeld HTML-kode waar ons die merker moet kry.

>>> teks = "Voorbeeld van gulsige reëlmatige uitdrukkingpassing"  

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

['Voorbeeld van gulsige reëlmatige uitdrukking-passing']

In plaas daarvan om net een merker te onttrek, het Python die hele string gekry. Daarom word dit gulsig genoem.

En wat om te doen om net die etiket te kry? In hierdie geval moet jy lui passing gebruik. Om so 'n uitdrukking te spesifiseer, word 'n vraagteken aan die einde van die patroon bygevoeg.

Jy sal die volgende kode en die uitvoer van die tolk kry.

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

[", "]

As dit vereis word om slegs die eerste voorkoms te kry, word die metode gebruik Soek ().

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

"

Dan sal slegs die openingsmerker gevind word.

Gewilde uitdrukkingsjablone

Hier is 'n tabel wat die mees gebruikte gereelde uitdrukkingpatrone bevat.

Dokumentasie vir die Re-module vir Python 3 in. Her module vir gereelde uitdrukkings

Gevolgtrekking

Ons het slegs die mees basiese metodes oorweeg om met gereelde uitdrukkings te werk. Jy het in elk geval gesien hoe belangrik hulle is. En hier maak dit geen verskil of dit nodig is om die hele teks of sy individuele fragmente te ontleed nie, of dit nodig is om 'n plasing op 'n sosiale netwerk te ontleed of data te versamel om dit later te verwerk. Gereelde uitdrukkings is 'n betroubare helper in hierdie saak.

Hulle laat jou toe om take uit te voer soos:

  1. Spesifikasie van die formaat van die data, soos 'n e-posadres of telefoonnommer.
  2. Kry 'n tou en verdeel dit in verskeie kleiner snare.
  3. Voer verskeie bewerkings met teks uit, soos om te soek, die nodige inligting te onttrek of 'n deel van die karakters te vervang.

Gereelde uitdrukkings laat jou ook toe om nie-onbeduidende bewerkings uit te voer. Met die eerste oogopslag is dit nie maklik om hierdie wetenskap te bemeester nie. Maar in die praktyk is alles gestandaardiseer, so dit is genoeg om dit een keer uit te vind, waarna hierdie instrument nie net in Python gebruik kan word nie, maar ook in enige ander programmeertaal. Selfs Excel gebruik gereelde uitdrukkings om dataverwerking te outomatiseer. Dit is dus 'n sonde om nie hierdie hulpmiddel te gebruik nie.

Lewer Kommentaar