Python RegEx: re.match(), re.search(), re.findall() példával
Mit tartalmaz a reguláris kifejezés? Python?
A Reguláris kifejezés (RE) a programozási nyelvben egy speciális szöveges karakterlánc, amelyet egy keresési minta leírására használnak. Rendkívül hasznos információk kinyerésére szövegekből, például kódokból, fájlokból, naplókból, táblázatokból vagy akár dokumentumokból.
A Python reguláris kifejezés az első dolog, hogy felismerjük, hogy minden lényegében egy karakter, és mintákat írunk, hogy megfeleljenek egy adott karaktersorozatnak, amelyet karakterláncnak is neveznek. Az Ascii vagy latin betűk azok, amelyek a billentyűzeten vannak, és Unicode-ot használnak az idegen szöveghez. Tartalmazza a számjegyeket és az írásjeleket, valamint az összes speciális karaktert, például $#@!%, stb.
Például a Python A reguláris kifejezés azt mondhatja a programnak, hogy keressen egy adott szöveget a karakterláncból, majd ennek megfelelően nyomtassa ki az eredményt. A kifejezés tartalmazhat
- Szövegegyeztetés
- Ismétlés
- elágazás
- Minta-összetétel stb.
Reguláris kifejezés vagy RegEx in Python RE (RE-k, reguláris kifejezések vagy reguláris kifejezések) keresztül importálható re modul. Python támogatja a reguláris kifejezést a könyvtárakon keresztül. RegEx be Python különféle dolgokat támogat, pl Módosítók, azonosítók és szóköz karakterek.
| azonosítók | Módosítók | Szóköz karakterek | Menekülés szükséges |
|---|---|---|---|
| \d= tetszőleges szám (egy számjegy) | A \d egy számjegyet jelent. Pl.: \d{1,5} 1,5 közötti számjegyet deklarál, például 424,444,545 XNUMX XNUMX stb. | \n = új sor | . + * ? [] $ ^ () {} | \ |
| \D= bármi, csak egy szám (nem számjegy) | + = 1 vagy több egyezik | \s= szóköz | |
| \s = szóköz (tabulátor, szóköz, újsor stb.) |
? = 0 vagy 1 egyezik | \t =tab | |
| \S= minden, csak egy szóköz | * = 0 vagy több | \e = menekülés | |
| \w = betűk (alfanumerikus karakter, beleértve a „_” karaktert is) | $ egy karakterlánc vége | \r = kocsi vissza | |
| \W = bármi, csak betűk (egy nem alfanumerikus karakternek felel meg, kivéve a „_” karaktert) | ^ egy karakterlánc egyezése | \f= űrlap feed | |
| . = minden, csak nem betűk (pontok) | | vagy x/y | ------ | |
| \b = bármilyen karakter, kivéve az új sort | [] = tartomány vagy „szórás” | ------ | |
| \. | {x} = az előző kód mennyisége | ------ |
Reguláris kifejezés (RE) szintaxisa
import re
- a „re” modult tartalmazza Python elsősorban karakterlánc-keresésre és -manipulációra használják
- Gyakran használt weboldalhoz iskaparás” (nagy mennyiségű adat kinyerése a webhelyekről)
A kifejezés oktatóanyagát ezzel az egyszerű gyakorlattal kezdjük a (w+) és (^) kifejezések használatával.
Példa w+ és ^ kifejezésre
- "^": Ez a kifejezés megegyezik egy karakterlánc kezdetével
- „w+“: Ez a kifejezés megegyezik a karakterlánc alfanumerikus karakterével
Itt látni fogjuk a Python RegEx Példa arra, hogyan használhatjuk a w+ és ^ kifejezéseket a kódunkban. Belefedjük a re.findall() függvényt Python, ebben az oktatóanyagban később, de egy ideig egyszerűen csak a \w+ és \^ kifejezésekre koncentrálunk.
Például a „guru99, oktatás jó móka” karakterláncunknál, ha a w+ és^ gombokkal hajtjuk végre a kódot, akkor a „guru99” kimenetet adja.
import re xx = "guru99,education is fun" r1 = re.findall(r"^\w+",xx) print(r1)
Ne feledje, ha eltávolítja a +jelet a w+-ból, a kimenet megváltozik, és csak az első betű első karakterét adja meg, azaz [g]
Példa a \s kifejezésre a re.split függvényben
- „s”: Ez a kifejezés szóköz létrehozására szolgál a karakterláncban
Hogy megértsük, hogyan működik ez a reguláris kifejezés Python működik, kezdjük egy egyszerűvel Python RegEx Példa egy osztott függvényre. A példában minden szót kettéosztottunk a „re.split” függvény segítségével, ugyanakkor a \s kifejezést használjuk, amely lehetővé teszi a karakterlánc minden egyes szavának külön elemzését.
Amikor végrehajtja ezt a kódot, ez a kimenetet adja: ['we', 'are', 'splitting', 'the', 'words'].
Most pedig nézzük meg, mi történik, ha eltávolítja a „\” jelet az s-ből. A kimenetben nincs 's' ábécé, ennek az az oka, hogy eltávolítottuk a '\'-t a karakterláncból, és az "s"-t szabályos karakterként értékeli, és így felosztja a szavakat, ahol "s"-t talál a karakterláncban.
Hasonlóképpen számos más Python reguláris kifejezés, amelyet többféleképpen használhat Python mint \d,\D,$,\.,\b stb.
Itt a teljes kód
import re xx = "guru99,education is fun" r1 = re.findall(r"^\w+", xx) print((re.split(r'\s','we are splitting the words'))) print((re.split(r's','split the words')))
Ezután látni fogjuk a reguláris kifejezéssel használt módszerek típusait Python.
Reguláris kifejezési módszerek használata
A „re” csomag számos módszert kínál a lekérdezések tényleges végrehajtására egy bemeneti karakterláncon. Meglátjuk a re in módszereit Python:
- re.match()
- kutatás()
- re.findall()
Megjegyzések: A reguláris kifejezések alapján Python két különböző primitív műveletet kínál. Az egyezési módszer csak a karakterlánc elején ellenőrzi az egyezést, míg a keresés a karakterlánc bármely részén ellenőrzi az egyezést.
re.match()
re.match() re in funkciója Python megkeresi a reguláris kifejezés mintáját, és visszaadja az első előfordulást. A Python A RegEx Match metódus csak a karakterlánc elején ellenőrzi az egyezést. Tehát, ha egyezés található az első sorban, akkor az egyezési objektumot adja vissza. De ha egyezés található valamelyik másik sorban, a Python A RegEx Match függvény nullát ad vissza.
Vegyük például a következő kódot Python re.match() függvény. A „w+” és „\W” kifejezés megegyezik a „g” betűvel kezdődő szavakkal, és ezt követően minden, ami nem „g”-vel kezdődik, nem azonosítható. A lista vagy karakterlánc egyes elemeinek egyezésének ellenőrzéséhez ebben a forloop-ot futtatjuk Python re.match() Példa.
re.search(): Minta keresése a szövegben
kutatás() függvény keresni fogja a reguláris kifejezés mintáját, és visszaadja az első előfordulást. Ellentétben Python re.match(), ellenőrzi a bemeneti karakterlánc összes sorát. A Python A re.search() függvény egy match objektumot ad vissza, ha a minta megtalálható, és nullát ad vissza, ha a minta nem található
Hogyan kell használni a keresést ()?
A search() függvény használatához importálni kell Python re modult először, majd futtassa a kódot. A Python A re.search() függvény a „mintát” és a „szöveget” a fő karakterláncunkból veszi át a kereséshez
Például itt két szó szerinti karakterláncot keresünk: „Szoftvertesztelés” „guru99”, egy „Szoftver” szövegben. Tesztelés szórakoztató”. A „szoftvertesztelésnél” megtaláltuk az egyezést, így az a kimenetét adja vissza Python re.search() Példa: "talált egyezés", míg a "guru99" szóra nem találtunk karakterláncot, ezért a kimenetet "Nincs egyezés"ként adja vissza.
re.findall()
Találd meg mindet() A modul az adott mintának megfelelő „összes” előfordulás keresésére szolgál. Ezzel szemben a search() modul csak az első előfordulást adja vissza, amelyik megfelel a megadott mintának. A findall() végigfut a fájl összes során, és egyetlen lépésben visszaadja a minta összes nem átfedő egyezését.
A re.findall() használata in Python?
Itt van egy listánk az e-mail címekről, és azt szeretnénk, hogy az összes e-mail cím kikerüljön a listából, a re.findall() metódust használjuk. Python. Megtalálja az összes e-mail címet a listából.
Itt található a teljes kód a re.findall() példához
import re
list = ["guru99 get", "guru99 give", "guru Selenium"]
for element in list:
z = re.match("(g\w+)\W(g\w+)", element)
if z:
print((z.groups()))
patterns = ['software testing', 'guru99']
text = 'software testing is fun?'
for pattern in patterns:
print('Looking for "%s" in "%s" ->' % (pattern, text), end=' ')
if re.search(pattern, text):
print('found a match!')
else:
print('no match')
abc = '[email protected], [email protected], [email protected]'
emails = re.findall(r'[\w\.-]+@[\w\.-]+', abc)
for email in emails:
print(email)
Python Zászlók
Sok Python A Regex metódusok és a Regex függvények egy opcionális argumentumot, a Flags-t vesznek fel. Ezek a zászlók módosíthatják az adott jelentését Python Regex minta. Hogy megértsük ezeket, látni fogunk egy-két példát ezekre a zászlókra.
Különféle zászlókat használtak Python magában foglalja a
| Szintaxis a Regex zászlókhoz | Mit csinál ez a zászló |
|---|---|
| [re.M] | Az elejét/végét tekintse át minden sornak |
| [re.I] | Figyelmen kívül hagyja a kis- és nagybetűket |
| [re.S] | Készíts [ . ] |
| [re.U] | A { \w,\W,\b,\B} létrehozása a Unicode szabályok szerint történik |
| [re.L] | Állítsa be a {\w,\W,\b,\B} nyelvi beállítást |
| [re.X] | Megjegyzés engedélyezése a Regexben |
Példa re.M vagy többsoros zászlókra
A többsoros mintakarakter [^] megegyezik a sztring első karakterével és minden sor elejével (közvetlenül az újsorok után). Míg a kis „w” kifejezés a szóköz karakterekkel való jelölésére szolgál. A kód futtatásakor az első „k1” változó csak a „g” karaktert írja ki a guru99 szóhoz, míg a többsoros jelző hozzáadásakor a karakterlánc összes elemének első karaktereit kéri le.
Itt a kód
import re xx = """guru99 careerguru99 selenium""" k1 = re.findall(r"^\w", xx) k2 = re.findall(r"^\w", xx, re.MULTILINE) print(k1) print(k2)
- Deklaráltuk az xx változót a ”guru99…” karakterlánchoz. karrierguru99….szelén”
- Futtassa a kódot többsoros flagek használata nélkül, a sorokból csak 'g'-t ad
- Futtassa a kódot a „multiline” jelzővel, amikor kinyomja a „k2” értéket, a kimenetet „g”, „c” és „s” formában adja meg.
- Tehát a különbség, amelyet a fenti példában többsoros hozzáadása után és előtt láthatunk.
Hasonlóképpen mást is használhat Python jelzők, mint a re.U (Unicode), re.L (Follow locale), re.X (Megjegyzés engedélyezése) stb.
Python 2 Példa
A fenti kódok Python 3 példa, Ha be akarsz futni Python 2 Kérjük, vegye figyelembe a következő kódot.
# Example of w+ and ^ Expression
import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+",xx)
print r1
# Example of \s expression in re.split function
import re
xx = "guru99,education is fun"
r1 = re.findall(r"^\w+", xx)
print (re.split(r'\s','we are splitting the words'))
print (re.split(r's','split the words'))
# Using re.findall for text
import re
list = ["guru99 get", "guru99 give", "guru Selenium"]
for element in list:
z = re.match("(g\w+)\W(g\w+)", element)
if z:
print(z.groups())
patterns = ['software testing', 'guru99']
text = 'software testing is fun?'
for pattern in patterns:
print 'Looking for "%s" in "%s" ->' % (pattern, text),
if re.search(pattern, text):
print 'found a match!'
else:
print 'no match'
abc = '[email protected], [email protected], [email protected]'
emails = re.findall(r'[\w\.-]+@[\w\.-]+', abc)
for email in emails:
print email
# Example of re.M or Multiline Flags
import re
xx = """guru99
careerguru99
selenium"""
k1 = re.findall(r"^\w", xx)
k2 = re.findall(r"^\w", xx, re.MULTILINE)
print k1
print k2
Teszteld Python Tudás
1. Melyik módszerrel keressük meg a minta összes előfordulását egy karakterláncban?
- kutatás()
- re.match()
- re.findall()
- re.split()
2. Mit jelent a \d karakterosztály a reguláris kifejezésekben?
- Bármely számjegy (0-9)
- Bármilyen nem számjegyű karakter
- Bármilyen szóköz karakter
- Bármilyen betű vagy szám
3. Melyik függvényt használnád egy karakterlánc felosztására szóközök alapján?
- re.split(r'\s', string)
- re.findall(r'\w+', karakterlánc)
- re.match(r'\s+', karakterlánc)
- re.split(r'\w+', karakterlánc)
4. Mi a fő különbség a re.match() és a re.search() között?
- A re.match() a karakterlánc elején keres mintát, míg a re.search() a karakterlánc bármely pontján keres mintát.
- A re.match() az összes egyezést, míg a re.search() az első egyezést adja vissza.
- A re.search() gyorsabb, mint a re.match().
- Mindkét funkció ugyanúgy működik.
Összegzésként
Egy reguláris kifejezés a programozási nyelv egy speciális szöveges karakterlánc, amelyet a keresési minták leírására használnak. Tartalmazza a számjegyeket és írásjeleket, valamint az összes speciális karaktert, például $#@!%, stb. A kifejezés tartalmazhat literált
- Szövegegyeztetés
- Ismétlés
- elágazás
- Minta-összetétel stb.
In Python, egy reguláris kifejezést RE-ként jelölünk (RE-k, reguláris kifejezések vagy reguláris kifejezések minták) beágyazva Python re modul.
- a „re” modult tartalmazza Python elsősorban karakterlánc-keresésre és -manipulációra használják
- Gyakran használják weboldalak „lekaparásához” is (nagy mennyiségű adat kinyerése a webhelyekről)
- A reguláris kifejezési módszerek közé tartozik re.match(),re.search()& re.findall()
- Más Python A reguláris kifejezés csere metódusai a sub() és subn(), amelyek az egyező karakterláncok helyettesítésére szolgálnak a re-ben
- Python Zászlók Sok Python A Regex metódusok és a Regex függvények egy opcionális argumentumot, a Flags-t vesznek fel
- Ezek a jelzők módosíthatják az adott Regex minta jelentését
- Különféle Python A Regex Methods-ban használt zászlók a re.M, re.I, re.S stb.







