|
|
1. sor: |
1. sor: |
− | ===Példák reguláris kifejezésekre=== | + | ===OOP=== |
| | | |
− | [[http://docs.python.org/2/howto/regex.html python.org: Regular expression HOWTO]]
| + | Egységbezárás (encapsulation): a procedurális megközelítéssel ellentétben az adatok és a függvények a program nem különálló részét képezik, azok összetartoznak: együtt alkotnak egy objektumot. Az objektum felülete(ke)n (interfész, interface) keresztül érhető el a többi objektum számára. |
| | | |
− | [[http://docs.python.org/2/library/re.html python.org: Regular expressions]]
| + | Osztály (class): egy objektum prototípusa, tulajdonságokkal ellátva, melyek jellemzik az osztály példányait. A tulajdonságok osztály és példányváltozók, és metódusok (tagfüggvények). Pont-jelöléssel érhetők el. |
| | | |
− | [[http://www.tutorialspoint.com/python/python_reg_expressions.htm tutorialspoint.com: Python regexp összefoglaló]]
| + | Példány (instance): egy osztályhoz tartozó egyedi objektum. |
| | | |
− | Írjunk olyan reguláris kifejezéset, mely illeszkedik az alábbiakban megadott mintára!
| + | Példányosítás (instantiation): egy osztály egy példányának létrehozása. |
| | | |
− | '''Feladat:''' néggyel osztható 2-jegyű szám
| + | Példány változó (instance variable): metóduson belül definiált változó, mely csak az osztály adott példányához tartozik. |
| | | |
− | [02468][048]|[13579][26]
| + | Osztályváltozó (class variable): változó, melyet az osztály minden példánya elér. |
| | | |
− | '''Feladat:''' szökőév
| + | Metódus (method, tagfüggvény): osztályon belül definiált spec. függvény, első argumentuma tipikusan a self. |
| | | |
− | ([1-9][0-9])(0[48]|[2468][048]|[13579][26])|(([2468][048]|[13579][26])00)
| + | Öröklődés (inheritance): származtatással egy már meglévő osztályból egy újat hozunk létre. Ez rendelkezni fog az ős minden tulajdonságával, amihez továbbiakat ad(hat)unk. |
| | | |
− | | + | Polimorfizmus/többalakúság (polymorphism): különböző viselkedésmódokkal ruházzuk fel az egymásból származtatott objektumokat. |
− | '''Feladat:''' 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
| + | |
− | | + | |
− | '''Feladat:''' 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
| + | |
− | | + | |
− | '''Feladat:''' HTML-kódban hexadecimális színkód (3 vagy 6 hexa szám)
| + | |
− | | + | |
− | ([0-9A-Fa-f]{3}){1,2}
| + | |
− | | + | |
− | | + | |
− | '''Feladat:''' a yyyy-mm-dd formátum szerinti érvényes dátum az 1600-as évektől
| + | |
− | | + | |
− | <python>
| + | |
− | """
| + | |
− | (
| + | |
− | (1[6-9]\d\d|[2-9]\d{3}) # tetszőleges év
| + | |
− | -(0[13456789]|1[0-2]) # nem február
| + | |
− | -(0[1-9]|[12]\d|30) # 1-30
| + | |
− | |
| + | |
− | (1[6-9]\d\d|[2-9]\d{3}) # tetszőleges év
| + | |
− | -02-(0[1-9]|1\d|2[0-8]) # február
| + | |
− | |
| + | |
− | (1[6-9]\d\d|[2-9]\d{3}) # tetszőleges év
| + | |
− | -(0[13578]|1[02]) # 31-napos hónap
| + | |
− | -31 # 31
| + | |
− | |
| + | |
− | ( ###### szökőév
| + | |
− | (1[6-9]|[2-9]\d) # első két jegy
| + | |
− | (0[48]|[2468][048]|[13579][26]) # 4-gyel osztható nem évszázad
| + | |
− | | # vagy
| + | |
− | (([2468][048]|[13579][26])00) # 400-zal osztható
| + | |
− | ) ###### szökőév eddig
| + | |
− | -02-29 # február 29
| + | |
− | )
| + | |
− | """
| + | |
− | </python>
| + | |
− | | + | |
− | '''Feladat:''' '-jelek vagy "-jelek közé zárt szöveg
| + | |
− | | + | |
− | (['"])[^\1]*\1
| + | |
− | | + | |
− | | + | |
− | === Modul szintű függvények ===
| + | |
− | | + | |
− | A modul betöltése:
| + | |
− | | + | |
− | import re
| + | |
− | | + | |
− | ====A match objektumok ====
| + | |
− | | + | |
− | re.match(pattern, string, flags=0)
| + | |
− | re.seartch(pattern, string, flags=0)
| + | |
− | | + | |
− | A match objektum metódusai: group(num=0), groups()
| + | |
− | | + | |
− | <python>
| + | |
− | >>> line = "gyöngyön elemelem vilmoskörte"
| + | |
− | >>>
| + | |
− | >>> matchObj = re.match(r'\b(.+)\1\b', line, re.M|re.I)
| + | |
− | >>>
| + | |
− | >>> if matchObj:
| + | |
− | ... print "matchObj.group() : ", matchObj.group()
| + | |
− | ... print "matchObj.group(1) : ", matchObj.group(1)
| + | |
− | ... print "matchObj.groups() : ", matchObj.groups()
| + | |
− | ... else:
| + | |
− | ... print "No match!!"
| + | |
− | ...
| + | |
− | matchObj.group() : gyöngyön
| + | |
− | matchObj.group(1) : gyön
| + | |
− | matchObj.groups() : ('gy\xc3\xb6n',)
| + | |
− | >>> matchObj = re.search(r'\b(.+)\1\b', line, re.M|re.I)
| + | |
− | >>>
| + | |
− | >>> if matchObj:
| + | |
− | ... print "matchObj.group() : ", matchObj.group()
| + | |
− | ... print "matchObj.group(1) : ", matchObj.group(1)
| + | |
− | ... print "matchObj.groups() : ", matchObj.groups()
| + | |
− | ... else:
| + | |
− | ... print "No match!!"
| + | |
− | ...
| + | |
− | matchObj.group() : gyöngyön
| + | |
− | matchObj.group(1) : gyön
| + | |
− | matchObj.groups() : ('gy\xc3\xb6n',)
| + | |
− | </python>
| + | |
− | | + | |
− | Iterátor match objektumra:
| + | |
− | | + | |
− | <python>
| + | |
− | >>> iterObj = re.finditer(r'\b(.+)\1\b', line, re.M|re.I)
| + | |
− | >>>
| + | |
− | >>> for j in iterObj:
| + | |
− | ... print j.group()
| + | |
− | ...
| + | |
− | gyöngyön
| + | |
− | elemelem
| + | |
− | </python>
| + | |
− | | + | |
− | Helyettesítés:
| + | |
− | | + | |
− | <python>
| + | |
− | >>> print re.sub(r'\b(.+)\1\b', r'\1|\1', line, re.M|re.I)
| + | |
− | gyön|gyön elem|elem vilmoskörte
| + | |
− | >>>
| + | |
− | >>> print re.sub(r'\b(.+)\1\b', r'\1|\1', line, 1, re.M|re.I)
| + | |
− | gyön|gyön elemelem vilmoskörte
| + | |
− | >>> print re.subn(r'\b(.+)\1\b', r'\1|\1', line, re.M|re.I)
| + | |
− | ('gy\xc3\xb6n|gy\xc3\xb6n elem|elem vilmosk\xc3\xb6rte', 2)
| + | |
− | >>> print re.split(r'[,.\s]+', 'szavak, ige, ez. Meg az')
| + | |
− | ['szavak', 'ige', 'ez', 'Meg', 'az']
| + | |
− | </python>
| + | |
− | | + | |
− | ====A regex objektumok ====
| + | |
− | | + | |
− | A '''compile''' függvény egy reguláris kifejezésből egy regex objektumot hoz létre, amelynek használhatóak a search, match... metódusai. Körülményesebb, mint az előzőekben leírt módszerek, de bonyolultabb esetekben, és többször használatos reguláris kifejezésre ezt érdemes használni.
| + | |
− | | + | |
− | compile(pattern, flags=0)
| + | |
− | | + | |
− | Ez a kód
| + | |
− | | + | |
− | prog = re.compile(pattern)
| + | |
− | result = prog.match(string)
| + | |
− | | + | |
− | ekvivalens ezzel:
| + | |
− | | + | |
− | result = re.match(pattern, string)
| + | |
− | | + | |
− | '''A reguláris kifejezés objektum metódusai:'''
| + | |
− | | + | |
− | search(string[, pos[, endpos]])
| + | |
− | | + | |
− | <python>
| + | |
− | >>> pattern = re.compile("a.")
| + | |
− | >>> pattern.search("hagyma")
| + | |
− | <_sre.SRE_Match object at 0xaf83d8>
| + | |
− | >>> _.group()
| + | |
− | 'ag'
| + | |
− | >>> pattern.search("hagyma", 2)
| + | |
− | >>> pattern.search("hagymaleves", 2)
| + | |
− | <_sre.SRE_Match object at 0xaf8440>
| + | |
− | >>> _.group()
| + | |
− | 'al'
| + | |
− | >>> pattern.search("hagymaleves", 2, 4)
| + | |
− | >>>
| + | |
− | </python>
| + | |
− | | + | |
− | A match működése hasonló, csak az elejére illeszt.
| + | |
Egységbezárás (encapsulation): a procedurális megközelítéssel ellentétben az adatok és a függvények a program nem különálló részét képezik, azok összetartoznak: együtt alkotnak egy objektumot. Az objektum felülete(ke)n (interfész, interface) keresztül érhető el a többi objektum számára.
Osztály (class): egy objektum prototípusa, tulajdonságokkal ellátva, melyek jellemzik az osztály példányait. A tulajdonságok osztály és példányváltozók, és metódusok (tagfüggvények). Pont-jelöléssel érhetők el.
Példány (instance): egy osztályhoz tartozó egyedi objektum.
Példányosítás (instantiation): egy osztály egy példányának létrehozása.
Példány változó (instance variable): metóduson belül definiált változó, mely csak az osztály adott példányához tartozik.
Osztályváltozó (class variable): változó, melyet az osztály minden példánya elér.
Metódus (method, tagfüggvény): osztályon belül definiált spec. függvény, első argumentuma tipikusan a self.
Öröklődés (inheritance): származtatással egy már meglévő osztályból egy újat hozunk létre. Ez rendelkezni fog az ős minden tulajdonságával, amihez továbbiakat ad(hat)unk.
Polimorfizmus/többalakúság (polymorphism): különböző viselkedésmódokkal ruházzuk fel az egymásból származtatott objektumokat.