Informatika1-2018/Gyakorlat3
Tartalomjegyzék |
Reguláris kifejezések
A reguláris kifejezéseket akkor használjuk, amikor összetettebb karaktersort keresünk egy szövegben, illetve ilyen karakterláncokat szeretnénk helyettesíteni. Az órán a https://regex101.com/#python oldalon fogjuk kipróbálni, hogy mi hogyan működik.
- Speciális karakterek: nem ismeri fel őket, más jelentésük van, csak \ előkével tudunk rájuk keresni, pl \$, \^ stb.
. ^ $ * + ? { } [ ] \ | ( )
Karakterosztályok
Egyelőre egyetlen karakterre illesztünk.
- \d: tetszőleges számjegy, \D: tetszőleges karakter, ami nem számjegy.
- \w: tetszőleges alfanumerikus karakter, betű, szám vagy alulvonás (_), \W: tetszőleges, nem alfanumerikus karakter.
- \s: whitespace, azaz tab, sor vége, szóköz, \S tetszőleges, nem whitespace karakter.
- Mi is megadhatunk karakterosztályt: [xyz], vagy tilthatunk is, pl. [^xyz]. Előbbi az x,y,z karakterek bármelyikére illeszkedik, utóbbi bármilyen karakterre, ami nem x,y vagy z. Sőt, kötőjellel elválasztva intervallunként hivatkozhatunk a karakterekre, pl. [a-z] illeszkedik az összes kisbetűre, de az [A-Za-z0-9] is helyes, ez minden kis- és nagybetűre és számjegyre illeszkedik.
- ^: sor eleje, $, sor vége.
- A . minden karakterre illeszkedik.
Ismétlődések
Jelölés | Ismétlődések száma | Példa |
* | 0,1, vagy akármennyi | a \d* illeszkedik a '123' karakterekre, de az üres -re is |
+ | legalább 1 | \d+ Illeszkedik tetszőleges darab számjegyre |
? | 0 vagy 1 | oda\-?vissza illeszkedik az 'oda-vissza' és az 'odavissza' szavakra is |
{m,n} | Legalább m, legfeljebb n darab, bármelyik szám elhagyható | :D{4,10} nem illeszkedik a ':DDDDDDDDDDDDDD'-re |
Választás
- Bármilyen magánhangzóra illeszkedik a a|e|i|o|u kifejezés. Próbáljuk ki a GetValue|Get|Set|SetValue kifejezést. A SetValue szövegnél mire illeszkedik?
Csoportosítás
Lehetőségünk van csoportokat kijelölni a kifejezésen belül. Az alábbi példa olyan szövegre illeszkedik, amelyben kétszer ismétlődik bármi.
(.*)\1
Tudunk keresni html tageket is
<([A-Z][A-Z0-9]*)\b[^>]*>.*?</\1>
Több csoportot is tudunk kezelni, a nyitó zárójelek sorrendje határozza meg a csoport sorszámát. Cseréljük le az email cím országkódját .hu-ra!
(\w+)@((\w+)\.)+(\w+)
Feladatok
- yyyy.mm.dd formátumú dátumok
- Magyar mobilszámok
- Néggyel osztható 2-jegyű szám
- Szökőév
- yyyy.mm.dd formátumú dátumok
- de az elválasztó más is lehet, nem csak pont, viszont a két elválasztónak azonosnak kell lennie.
yyyy.mm.dd yyyy-mm-dd yyyy,mm,dd
- replace-el:
- alakítsuk át a yyyy-mm-dd formátumú dátumokat mm-dd-yy alakúra!
- cseréljünk fel két oszlopot ebben: [1]
Nehezebb feladatok
Nagy betűkkel írt római számok
Évezred: M{0,4}
, évszázad: CM|CD|D?C{0,3}
, évtized: XC|XL|L?X{0,3}
, év: IX|IV|V?I{0,3}
. Akkor mégis mi a hiba az alábbi megoldással?
M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})
Hogy illeszkedik az üres sztringre is! Megoldás
\b(?=[MDCLXVI])M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})\b
Pozitív egészek, esetleg a sokjegyű számok hármasával csoportosítva vannak és a csoportok szóközzel elválasztva
[1-9](\d{0,2}( \d{3})+|\d*)
Ugyanez szóhatárok közt:
\b[1-9](\d{0,2}( \d{3})+|\d*)\b
HTML-kódban hexadecimális színkód (3 vagy 6 hexa szám)
([0-9A-Fa-f]{3}){1,2}