Előfordult már, hogy egy Excel táblázatban a cellákban tárolt szövegekben kellett volna lecserélnünk kifejezéseket, kimazsoláznunk egy dokumentumból az e-mail címeket, ellenőriznünk telefonszámok helyes felépítését vagy mondjuk egy HTML fájlban lett volna jó lecserélni bizonyos HTML formázásokat markdown jelölésekre? Még temérdek példát sorolhatnánk, mikor jöhet jól a hagyományos keresés vagy keresés és csere funkciók helyett az, ha inkább Regexre épülő funkciót használunk. Ezzel jelentősen egyszerűsíthetjük a nagyobb adathalmazok tartalmának feldolgozását, részek, mintázatok, felépítésükben hasonló, de tartalmukban eltérő karakterláncok cseréjét stb. S ami a legjobb, ez a módszer viszonylag sok helyen használható. Megoldható például a Regex használat az Excelben is. Lássuk, mi is ez valójában és hogyan működik az Excelben (de amúgy akár más táblázatkezelőkben is, mint mondjuk a Google Sheets).
Regex: a sokoldalú keresés legjobb módja
A Regex, avagy a reguláris kifejezések, egy speciális mintázatkereső nyelv, amelyet szövegek keresésére, ellenőrzésére és módosítására használnak. Segítségével könnyedén megtalálhatunk szintaktikai szabályok szerint leírt karakterláncokat, alkalmazhatunk helyettesítő karaktereket, valamint különböző szabályok alapján feldolgozhatunk, de akár módosíthatunk is szövegeket.
Az egyik leggyakoribb felhasználási területe az adatellenőrzés, például email-címek, telefonszámok vagy irányítószámok formátumának vizsgálata. Emellett kiválóan alkalmas szövegek keresésére és cseréjére is, például amikor egy dokumentumban egy adott szó összes előfordulását szeretnénk módosítani. A szövegfeldolgozás terén is nagy segítséget nyújt, hiszen különböző fájlformátumokban, például HTML vagy JSON dokumentumokban lehet vele adatokat kinyerni. Gyakran alkalmazzák naplófájlok és adatelemzési folyamatok során is, amikor egy nagy méretű adatbázisból vagy logfájlból kell speciális információkat kinyerni. A programozás és az automatizálás világában pedig szinte elengedhetetlen eszköz, mivel lehetővé teszi, hogy szkriptekben és alkalmazásokban bonyolult szövegkezelési feladatokat hajtsunk végre gyorsan és hatékonyan. A reguláris kifejezések tehát rendkívül sokoldalúan használhatók, és nagy segítséget jelentenek azok számára, akik gyakran dolgoznak szöveges adatokkal, legyen szó keresésről, cseréről vagy adatok feldolgozásáról.
A reguláris kifejezések használata során különböző jelölések segítségével határozhatjuk meg, hogy milyen mintázatokat szeretnénk keresni egy szövegben. Ezek a jelölések lehetővé teszik adott karakterek, ismétlődések vagy speciális minták felismerését. Például a pont (.) egyetlen – de azon belül bármilyen – karaktert helyettesít, kivéve az új sort. Ha például a l.p kifejezést használjuk, az illeszkedik a ” lap”, ” lop” vagy ” láp” szavakra, de nem fog működni „lelép” esetén, mert ott több karakter van az ”l” és a “p” között.
A szögletes zárójelek ([]) segítségével egy adott karakterkészletet adhatunk meg. A [abc] például az „a”, „b” vagy „c” karakterre illeszkedik, míg a [0-9] bármely számjegyre. A kötőjel lehetővé teszi tartományok megadását is, így a [a-z] az összes kisbetűt jelenti.
A csillag (*) és a plusz (+) ismétlődéseket jelöl. A csillag azt jelenti, hogy az előtte álló karakter vagy csoport nullaszor vagy többször is szerepelhet, például az a* illeszkedik az “a”-ra, az „aa”-ra vagy akár az „aaaaa”-ra is, sőt, akkor is teljesül mint feltétel, ha egy darab “a” sincs a vizsgált karakterláncban. A plusz ezzel szemben legalább egyszeri előfordulást igényel, tehát az a+ kifejezés nem fog illeszkedni egy üres sztringre, de „a”-ra vagy „aaa”-ra igen. Ilyen jelölésekből persze van bőven, íme néhány:
. - Bármilyen egyetlen karakter, kivéve az újsor (`\n`)
^ - A sor elejére vonatkozik
$ - A sor végére vonatkozik
* - Előző karakter 0 vagy több alkalommal szerepelhet
+ - Előző karakter 1 vagy több alkalommal szerepelhet
? - Előző karakter 0 vagy 1 alkalommal szerepelhet (opcionális elem)
{n} - Pontosan `n` alkalommal szerepelhet
{n,} - Legalább `n` alkalommal szerepelhet
{n,m} - Legalább `n`, de legfeljebb `m` alkalommal szerepelhet
[abc] - `a`, `b` vagy `c` karakterek valamelyikére vonatkozik
[^abc] - Minden karakterre vonatkozik, kivéve `a`, `b` vagy `c`
[a-z] - Bármely kisbetűre vonatkozik `a`-tól `z`-ig
[A-Z] - Bármely nagybetűre vonatkozik `A`-tól `Z`-ig
[0-9] - Bármely számjegyre vonatkozik `0`-tól `9`-ig
\d - Bármely számjegy (ugyanaz, mint `[0-9]`)
\D - Nem számjegy karakter (ugyanaz, mint `[^0-9]`)
\w - Bármely betű, szám vagy aláhúzás (`[A-Za-z0-9_]`)
\W - Nem betű, szám vagy aláhúzás (`[^A-Za-z0-9_]`)
\s - Bármilyen szóköz (szóköz, tabulátor, újsor)
\S - Nem szóköz karakter
\b - Szóhatár (például `\bszó\b` csak a teljes „szó” szóra vonatkozik)
\B - Nem szóhatár (például `\Bszó\B` nem illeszkedik, ha a „szó” önálló szó)
| - VAGY (például `macska|kutya` vonatkozik a „macska” vagy „kutya” szavakra is)
Jó, nem állítjuk, hogy ez így elsőre teljesen érthető, de némi gyakorlással azzá válhat és onnantól kezdve nagyon hatékonyan tudunk szövegeket feldolgozni a Regex segítségével, akár az Excelben is.
Regex használat az Excelben
Az Excelben rögtön több függvény is rendelkezésünkre áll a Regex használatához: REGEXCSERE, REGEXKIVONÁS, REGEXTESZT. Ezekkel különféle feladatok végezhetők el, a Regex kifejezésekre építve.
Ha például van egy táblázatunk, amelyben formázott telefonszámokat tárolunk, s mondjuk ezekben szeretnénk lecserélni a körzetszámot XX jelre, akkor ezt a REGEXCSERE segítségével tudjuk megoldani, az alábbi módon:
REGEXCSERE(szöveg; minta; csere; [előfordulás]; [case_sensitivity])
Konkrét példával:
=REGEXCSERE(B6;"-\d\{2}-";"-XX-")
Utóbbinak az lesz az eredménye, hogy a +36-30-123-4567 felépítésű telefonszámmá +36-XX-123-4567 alakul át.
Hasonlóan praktikus darab a REGEXTESZT is. Ennek használata egy fokkal egyszerűbb talán:
REGEXTESZT(szöveg; minta; [case_sensitivity])
Például a =REGEXTESZT(B5;"[a-z]") képlettel kideríthetjük, hogy egy szöveg tartalmaz-e kisbetűket, míg a =REGEXTESZT(B3;"[0-9]") képlettel tisztázható, hogy az adott cella tartalmaz-e számokat. De ennél összetettebb feladatokra is képes. Az előbbiekhez hasonlóan például meg tudjuk állapítani egy e-mail címről is, hogy a felépítése megfelelő-e:
=REGEXTESZT(B7;"^\[a-zA-Z0-9.\_%+-]+@\[a-zA-Z0-9.-]+\.\[a-zA-Z]\{2,}$")
Vagyis ha a szövegnek van előtagja a @ jel előtt és az utótag is megvan és megfelel az e-mailek felépítési követelményeinek, akkor minden IGAZ, ha nem, akkor HAMIS érték jelenik meg a cellában. Részletesen a jelölések:
^ – A szöveg elejét jelzi.
[a-zA-Z0-9._%+-]+ – Az e-mail cím előtagja (például “teszt123”, “teszt.jeno”, “info” stb.). Engedélyezett karakterek: betűk, számok, pont (.), aláhúzás (_), százalék (%), plusz (+), kötőjel (-). A végén a + jel azt jelenti, hogy legalább egy karakternek lennie kell.
@ – Az e-mail címben kötelező @ szimbólum.
[a-zA-Z0-9.-]+ – A domain név (pl. “gmail.com”, “teszt.hu”). Engedélyezett karakterek: betűk, számok, pont (.), kötőjel (-). A + jel itt is azt jelenti, hogy legalább egy karakter kell.
\. - A pontot jelöli a domain végén (például .com, .org).
[a-zA-Z]{2,} – A legvégső tartomány (TLD), pl. “com”, “hu”, “net”, “org”, stb. Csak betűk szerepelhetnek és legalább 2 karakter hosszúnak kell lennie.
$ – A szöveg végének kell lennie ezen a ponton (tehát nem lehet utána extra karakter).
Végül pedig ott van még a REGEXKIVONÁS is, amellyel kívánt szövegeket tudunk kinyerni a forrásból egy megadott reguláris kifejezés alapján. A formátuma:
REGEXKIVONÁS(szöveg; minta; [return_mode]; [case_sensitivity])
Ha például a fentebbi példánál maradva az e-mail címekből kigyűjtenénk a domain neveket és végződéseket, azt az alábbi megoldással tehetnénk meg: =REGEXKIVONÁS(B6;"@(.+)")
Az alábbi képernyőképen látható, hogy a fentiek egyetlen Excel táblázatba foglalva miként nézhetnek ki.
Természetesen töredékét sem tudtuk átadni egyetlen cikkben sem a Regex jelölések kavalkádjának, sem annak, hogy mi mindenre képes az Excel ezek használatával. Inkább csak ízelítőt igyekeztük adni a dologról. Akinek pedig ezek után megjött a kedve ahhoz, hogy megismerkedjen a Regex mélyreható használatával, annal első körben tudjuk ajánlani a Microsoft ezen oldalát. Ez felsorolja a karakterek, operátorok és szerkezetek egy-egy adott kategóriáját, amelyekkel reguláris kifejezéseket definiálhatunk. Ezek természetesen nem csak az Excelben, de programozásnál (például a Python-ban, .NET-ben vagy akár a Xojo-ban is használhatók) is kifejezetten jól jöhetnek.







