A Python 3 Re moduljának dokumentációja in . Re modul a reguláris kifejezésekhez

A reguláris kifejezések szinte minden programozási nyelv nagyon népszerű összetevői. Segítségükkel gyorsan hozzáférhet a szükséges információkhoz. Különösen akkor használják őket, ha szöveg feldolgozására van szükség. A Python alapértelmezés szerint egy speciális modullal érkezik. re, amely a reguláris kifejezésekkel való munkavégzésért felelős.

Ma részletesen fogunk beszélni arról, hogy mi ez általában, hogyan kell dolgozni velük és hogyan működik a modul re segíteni fog.

Szabályos kifejezések: bevezetés

Mire használhatók a reguláris kifejezések? Szinte minden. Például ezek:

  1. Szöveges ellenőrzést igénylő webalkalmazások. Tipikus példa az online levelezőkliensek.
  2. Bármilyen más projekt, amely szövegekkel, adatbázisokkal stb. kapcsolatos.

Mielőtt elkezdené a szintaxis elemzését, részletesebben meg kell értenünk a könyvtár működésének alapelveit re és általában mi a jó benne. Valós gyakorlatból is hozunk példákat, ahol ismertetjük használatuk mechanizmusát. Létrehozhat egy ilyen sablont, amely alkalmas arra, hogy sokféle műveletet hajtson végre szöveggel.

Mi az a sablon a Re könyvtárban?

Segítségével különféle típusú információkat kereshet, ezeknek megfelelő információkat kaphat, hogy más funkciókat adaptívabbá tegye. És természetesen ezen adatok feldolgozására.

Vegyük például a következő sablont: s+. Ez bármilyen szóköz karaktert jelent. Ha pluszjelet ad hozzá, akkor ez azt jelenti, hogy a minta egynél több szóközt tartalmaz. Még azokkal a tabulátor karakterekkel is egyezhet, amelyekkel meghívott t+.

Használatuk előtt importálnia kell a könyvtárat Re. Ezt követően egy speciális paranccsal állítjuk össze a sablont. Ez két lépésben történik.

>>> import re

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

Konkrétan ez a kód egy használható sablon összeállításának műveletét hajtja végre. például szóközök (egy vagy több) keresésére.

Külön információk beszerzése különböző karakterláncokból reguláris kifejezések segítségével

Tegyük fel, hogy van egy változónk, amely a következő információkat tartalmazza.

>>> szöveg = “””100 INF Informatika

213 MAT Matematika  

156 HUN angol»»»

Három képzési kurzust tartalmaz. Mindegyik három részből áll – számból, kódból és névből. Látjuk, hogy a szavak közötti intervallum eltérő. Mi a teendő, hogy ezt a sort külön számokra és szavakra bontsa? E cél eléréséhez két módszer létezik:

  1. függvényt hívni re.split.
  2. függvény alkalmazása osztott mert regex.

Íme egy példa az egyes metódusok szintaxisának használatára a változónk esetében.

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

# vagy

>>> regex.split(text)

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

Általában mindkét módszer használható. De valójában sokkal könnyebb reguláris kifejezést használni, ahelyett, hogy többször használnánk a függvényt. re.split.

Egyezések keresése három függvénnyel

Tegyük fel, hogy csak számokat kell kivonnunk egy karakterláncból. Mit kell ehhez tenni?

re.findall()

Itt van a függvény használati esete Találd meg mindet(), amely a reguláris kifejezésekkel együtt lehetővé teszi egy vagy több szám előfordulásának kinyerését egy szöveges változóból.

>>> nyomtatás (szöveg)  

100 INF Informatika

213 MAT Matematika  

156 HUN angol

>>> regex_szám = re.compile('d+')  

>>> regex_num.findall(text)  

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

A d szimbólummal együtt olyan sablont használtunk, amely minden változóban vagy szövegben található számértéket jelez. És mivel hozzáadtunk egy +-ot, ez azt jelenti, hogy legalább egy számnak jelen kell lennie. 

A * jellel azt is megadhatja, hogy egy számjegy megléte nem szükséges az egyezés megtalálásához.

De a mi esetünkben, mivel a +-t használtuk, a -val kivontuk Találd meg mindet() A kurzusok 1 vagy több digitális megjelölése a szövegből. Így esetünkben a reguláris kifejezések a függvény beállításaiként működnek.

re.search() vs re.match()

Ahogy a függvények nevéből sejthető, az első egyezést keres a szövegben. Kérdés: Mi a különbség a között Találd meg mindet? A lényeg az, hogy egy adott objektumot ad vissza, amely megfelel a mintának, és nem a talált eredmények teljes sorozatát lista formájában, mint az előző függvény.

A re.match funkció viszont ugyanezt teszi. Csak a szintaxis különbözik. A sablont az elején kell elhelyezni. 

Vegyünk egy példát, amely ezt bizonyítja.

>>> # hozzon létre egy változót szöveggel

>>> text2 = «»»INF Informatika

213 MAT Matematika 156″»»  

>>> # fordítsd le a regex-et, és keress mintákat

>>> regex_szám = re.compile('d+')  

>>> s = regex_num.search(text2)  

>>> print('Első index:', s.start())  

>>> print('Utolsó index:', s.end())  

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

Első index: 17 

Utolsó index: 20

213

Ha más módon szeretne hasonló eredményt elérni, használhatja a funkciót csoport().

A szöveg egy részének cseréje Re könyvtárra

Szöveg cseréjéhez használja a funkciót re.sub(). Tegyük fel, hogy a kurzuslistánk egy kicsit megváltozott. Látjuk, hogy minden digitális érték után van egy fülünk. Az a feladatunk, hogy ezt a sorozatot egy sorba egyesítsük. Ehhez le kell cserélnünk az s+ kifejezést átmenni 

Az eredeti szöveg ez volt:

# hozzon létre egy változót szöveggel

>>> szöveg = “””100 INF t Informatika

213 MAT t matek  

156 HUN t angol»»»  

>>> nyomtatás (szöveg)  

100 INFORMÁCIÓ Számítástechnika

213 XNUMX XNUMX MAT Matematika  

156 HUN Angol

A kívánt művelet végrehajtásához a következő kódsorokat használtuk.

# cserélj le egy vagy több szóközt 1-gyel

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

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

Ennek eredményeként egy sorunk van. 

101 COM Számítógépek 205 MAT Matematika 189 HUN Angol

Most fontoljon meg egy másik problémát. Nem állunk szemben a szóközök elhelyezésének feladatával. Számunkra sokkal fontosabb, hogy minden kurzusnév új sorban kezdődjön. Ehhez egy másik kifejezést használnak, amely újsort ad a kivételhez. Milyen kifejezés ez?

könyvtár Re támogatja az olyan funkciót, mint a negatív egyezés. Abban különbözik a közvetlentől, hogy a perjel előtt felkiáltójelet tartalmaz. Vagyis ha ki kell hagynunk az újsor karaktert, akkor n helyett !n-t kell írnunk.

A következő kódot kapjuk.

# távolítsa el az összes szóközt, kivéve az újsort  

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

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

100 INF Informatika

213 MAT Matematika  

156 HUN angol

Mik azok a reguláris kifejezés csoportok?

A reguláris kifejezések csoportjai segítségével külön elemek formájában kaphatjuk meg a kívánt objektumokat, és nem egy sorban. 

Tegyük fel, hogy a kurzus számát, kódját és nevét nem egy sorban, hanem különálló elemekként kell megkapnunk. A feladat elvégzéséhez rengeteg felesleges kódsort kell írnia. 

Valójában a feladat jelentősen leegyszerűsíthető. Összeállíthatja a sablont az összes bejegyzéshez, és csak megadhatja azokat az adatokat, amelyeket a zárójelben kell megkapnia.

Nagyon kevés sor lesz. 

# hozzon létre csoportokat természetesen szövegsablonokból, és bontsa ki őket

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

>>> re.findall(pályaminta, szöveg)  

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

A „mohó” párosítás fogalma

Alapesetben a reguláris kifejezések úgy vannak programozva, hogy a maximális mennyiségű egyező adatot kivonják. És még akkor is, ha sokkal kevesebbre van szüksége.

Nézzünk egy HTML-kód mintát, ahol a címkét kell megszereznünk.

>>> text = "Példa a mohó reguláris kifejezésegyeztetésre"  

>>> re.findall('', szöveg)  

['Példa mohó reguláris kifejezés-illesztésre']

Egyetlen címke kibontása helyett a Python megkapta az egész karakterláncot. Ezért hívják kapzsinak.

És mit kell tenni, hogy csak a címke legyen? Ebben az esetben lusta egyeztetést kell használnia. Egy ilyen kifejezés megadásához kérdőjel kerül a minta végére.

A következő kódot és az értelmező kimenetét kapja meg.

>>> re.findall('', szöveg)  

[”, ”]

Ha csak az első talált előfordulást kell megkapni, akkor a módszert alkalmazzuk keresés ().

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

"

Ekkor csak a nyitó címke található.

Népszerű kifejezéssablonok

Itt van egy táblázat, amely a leggyakrabban használt reguláris kifejezés-mintákat tartalmazza.

A Python 3 Re moduljának dokumentációja in . Re modul a reguláris kifejezésekhez

Következtetés

Csak a legalapvetőbb módszereket vettük figyelembe a reguláris kifejezésekkel való munkavégzéshez. Mindenesetre láttad, mennyire fontosak. És itt teljesen mindegy, hogy a teljes szöveget vagy annak egyes töredékeit kell elemezni, szükséges-e elemezni egy bejegyzést egy közösségi hálózaton, vagy adatokat kell gyűjteni a későbbi feldolgozáshoz. A reguláris kifejezések megbízható segítséget jelentenek ebben a kérdésben.

Lehetővé teszik olyan feladatok elvégzését, mint például:

  1. Az adatok formátumának megadása, például e-mail cím vagy telefonszám.
  2. Egy karakterlánc beszerzése és felosztása több kisebb karakterláncra.
  3. Végezzen különféle műveleteket a szöveggel, például keresést, a szükséges információk kinyerését vagy a karakterek egy részének cseréjét.

A reguláris kifejezések lehetővé teszik nem triviális műveletek végrehajtását is. Első pillantásra nem könnyű elsajátítani ezt a tudományt. De a gyakorlatban minden szabványosított, így elég egyszer kitalálni, ami után ez az eszköz nem csak Pythonban használható, hanem bármilyen más programozási nyelvben is. Még az Excel is használ reguláris kifejezéseket az adatfeldolgozás automatizálására. Tehát bűn nem használni ezt az eszközt.

Hagy egy Válaszol