Informatika1-2015/Gyakorlat3
(→Ismétlődések) |
a (→Feladatok) |
||
(2 szerkesztő 16 közbeeső változata nincs mutatva) | |||
1. sor: | 1. sor: | ||
+ | [[Informatika1-2015/Gyakorlat2|Előző gyakorlat]] - [[Informatika1-2015#Gyakorlatok|Fel]] - [[Informatika1-2015/Gyakorlat4|Következő gyakorlat]] | ||
+ | |||
== Reguláris kifejezések == | == 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. | 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. | ||
19. sor: | 21. sor: | ||
| Jelölés || Ismétlődések száma || Példa | | 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 | + | | '''*''' || 0,1, vagy akármennyi || a '''\d*''' illeszkedik a '123' karakterekre, de az üres ''-re is |
|- | |- | ||
− | | '''+''' || legalább 1 || '''\d+''' | + | | '''+''' || 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. | ||
+ | <pre> | ||
+ | (.*)\1 | ||
+ | </pre> | ||
+ | Tudunk keresni html tageket is | ||
+ | <pre> | ||
+ | <([A-Z][A-Z0-9]*)\b[^>]*>.*?</\1> | ||
+ | </pre> | ||
+ | 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! | ||
+ | <pre> | ||
+ | (\w+)@((\w+)\.)+(\w+) | ||
+ | </pre> | ||
+ | |||
+ | == Feladatok == | ||
+ | yyyy.mm.dd formátumú dátumok | ||
+ | |||
+ | \d{4}\.\d{2}\.\d{2} | ||
+ | |||
+ | Magyar mobilszámok | ||
+ | |||
+ | 06\-(3|2|7)0\-\d{7} | ||
+ | |||
+ | Link keresése html oldalon | ||
+ | |||
+ | <a.*\shref=\"([^\">]+\").*>.*</a> | ||
+ | |||
+ | Webcímek | ||
+ | <pre> | ||
+ | http://(www.)?([a-z0-9_]+\.)+(\w{2,3}) | ||
+ | </pre> | ||
+ | Keressük ki a hét képét a bmeme.hu oldalon! | ||
+ | |||
+ | Néggyel osztható 2-jegyű szám | ||
+ | |||
+ | [02468][048]|[13579][26] | ||
+ | |||
+ | Szökőév | ||
+ | |||
+ | ([1-9][0-9])(0[48]|[2468][048]|[13579][26])|(([2468][048]|[13579][26])00) | ||
+ | |||
+ | |||
+ | Nagy betűkkel írt római számok | ||
+ | |||
+ | Évezred: <code>M{0,4}</code>, évszázad: <code>CM|CD|D?C{0,3}</code>, évtized: <code>XC|XL|L?X{0,3}</code>, év: <code>IX|IV|V?I{0,3}</code>. 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} | ||
+ | |||
+ | == Házi feladat == | ||
+ | [[Informatika1-2015#RegEx|Itt található]] | ||
+ | |||
+ | [[Informatika1-2015/Gyakorlat2|Előző gyakorlat]] - [[Informatika1-2015#Gyakorlatok|Fel]] - [[Informatika1-2015/Gyakorlat4|Következő gyakorlat]] |
A lap jelenlegi, 2015. szeptember 28., 20:13-kori változata
Előző gyakorlat - Fel - Következő gyakorlat
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
\d{4}\.\d{2}\.\d{2}
Magyar mobilszámok
06\-(3|2|7)0\-\d{7}
Link keresése html oldalon
<a.*\shref=\"([^\">]+\").*>.*</a>
Webcímek
http://(www.)?([a-z0-9_]+\.)+(\w{2,3})
Keressük ki a hét képét a bmeme.hu oldalon!
Néggyel osztható 2-jegyű szám
[02468][048]|[13579][26]
Szökőév
([1-9][0-9])(0[48]|[2468][048]|[13579][26])|(([2468][048]|[13579][26])00)
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}