Regex összefoglaló

A reguláris kifejezések (regex) egy olyan minta-illesztési technika, amely lehetővé teszi a karakterláncok feldolgozását és ellenőrzését.

Mi a reguláris kifejezés?

Egy reguláris kifejezés egy olyan karakterlánc, amely egy mintát határoz meg, amelyet egy másik karakterláncban keresünk. A minta lehet egyszerű vagy összetett, és különböző karakterekből állhat.

Hogyan használjuk a reguláris kifejezéseket?

A reguláris kifejezéseket használhatjuk:

Regex a Pythonban

A reguláris kifejezések (regex) a Pythonban a karakterláncok keresésére, egyeztetésére és manipulálására szolgálnak, specifikus minták alapján. A Python egy ún. re modult biztosít, amely tartalmazza a reguláris kifejezésekkel való munkához szükséges funkciókat és metódusokat.

Alapvető funkciók a re modulban

Funkció Magyarázat
re.search(pattern, string) Match objektumot ad vissza, ha a karakterláncban bárhol talál egyezést. Ha egynél több egyezés van, akkor csak az első előfordulását adja vissza. Ha nem talált egyezést, akkor None értékkel tér vissza.
re.findall(pattern, string) Egy listát ad vissza, amely tartalmazza az összes találatot.
re.sub(pattern, repl, string) Kicseréli a minta előfordulásait a karakterláncban egy helyettesítő karakterláncra.
re.split(pattern, string) Egy listát ad vissza, melybe felosztja a karakterláncot a minta előfordulásai alapján.

Gyakori minták

Minta Magyarázat
\d Bármely számjegyet (0-9) jelöl.
\D Bármely nem számjegy karaktert jelöl.
\w Bármely alfanumerikus karaktert (betűk és számok) és aláhúzást jelöl.
\W Bármely nem alfanumerikus karaktert jelöl.
\s Bármely szóköz karaktert (szóköz, tabulátor, új sor) jelöl.
\S A \s tagadása.
\b A szó elején vagy végén jelöli.
. Bármely karaktert jelöl, kivéve az új sort.
^ A karakterlánc elejét jelöli.
$ A karakterlánc végét jelöli.
* A megelőző elem 0 vagy több ismétlését jelöli.
+ A megelőző elem 1 vagy több ismétlését jelöli.
? A megelőző elem 0 vagy 1 ismétlését jelöli.
{n} Pontosan n ismétlést jelöl a megelőző elemre.
{n,} n vagy több ismétlést jelöl a megelőző elemre.
{n,m} n és m közötti ismétlést jelöl a megelőző elemre.
\| Logikai VAGY-ként működik.
[] A zárójelben megadott karakterhalmaz egy elemének előfordulását jelöli.

A re modul használata

import re # Minta karakterlánc text = "Az Alföld egyre sivatagosabb." # Keresés a "Alföld" szó után match = re.search(r"Alföld", text) if match : print(f"Megtaláltam: {match.group()}") # Minden olyan szót keres, ami 'a'-val kezdődik matches = re.findall(r"\ba\w*", text) print(f"A 'a'-val kezdődő szavak: {matches}") # "Alföld" helyettesítése "Alpok"-ra new_text = re.sub(r"Alföld", "Alpok", text) print(f"Frissített szöveg: {new_text}") # A szöveg felosztása szavakra words = re.split(r"\s+", text) print(f"Szavak a szövegben: {words}")

Kimenet

Megtalálva: Alföld A 'a'-val kezdődő szavak: ['az', 'alföld'] Frissített szöveg: Az Alpok egyre sivatagosabb. Szavak a szövegben: ['Az', 'Alföld', 'egyre', 'sivatagosabb'].

Regex validator online

https://regex101.com/

Reguláris kifejezések a pythonban

import re import unittest def only_numbers(text): return bool(re.match(r'^\d+$', text)) def only_letters(text): return bool(re.match(r'^[a-zA-Z]+$', text)) def only_spaces(text): return bool(re.match(r'^\s+$', text)) def date_validation(text): return bool(re.match(r'^\d{4}-\d{2}-\d{2}$', text)) def phone_number_validation(text): return bool(re.match(r'^06\d{8}$', text)) class TestFunctions(unittest.TestCase): def test_only_numbers(self): self.assertTrue(only_numbers('12345')) self.assertFalse(only_numbers('abc')) def test_only_letters(self): self.assertTrue(only_letters('hello')) self.assertFalse(only_letters('123')) def test_only_spaces(self): self.assertTrue(only_spaces(' ')) self.assertFalse(only_spaces('hello')) def test_date_validation(self): self.assertTrue(date_validation('2022-07-25')) self.assertFalse(date_validation('abc')) def test_phone_number_validation(self): self.assertTrue(phone_number_validation('0612345678')) self.assertFalse(phone_number_validation('abc')) if __name__ == '__main__': unittest.main()

Ebben az alkalmazásban öt függvény van megvalósítva:

A unittest modul segítségével teszteljük ezeket a függvényeket. Az egyes tesztekben ellenőrizzük, hogy a függvények helyesen működnek-e.

Gyakorló feladatok

Próbáljátok meg a legjobb tudásotok szerint megoldani a következő feladatokat python-ban és írjatok az elkészült függvényekre unittest-eket!

1. IMEI szám

Az IMEI (International Mobile Equipment Identity) szám egy egyedi azonosító szám, amelyet a mobiltelefonok és más mobil eszközök használnak. Formai követelménye:

2. Bankszámlaszámok formai validálása (magyar és IBAN)

3. Telefonszám validálása

Magyar telefonszámok validálása, beleértve a mobil, budapesti és vidéki számokat.

4. Emberi nevek formai validálása

Gondoljunk arra, hogy több keresztneve is lehet egy illetőnek és lehetnek benne rövid kötöszavak is, továbbá névelő tagokra is gondolni kell (dr., Dr., phd, prof., ifj., id., Mr, Mrs, Frau, Herr). Minden név tag nagybetűvel kezdődjön kivéve a kötöszavakat (von, de, la). Ügyeljünk rá, hogy keresztnevekből bármennyi lehet!