Informatika2-2014/teszt
142. sor: | 142. sor: | ||
====A regex objektumok ==== | ====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]]) |
A lap 2014. március 5., 13:07-kori változata
Tartalomjegyzék |
Példák reguláris kifejezésekre
[python.org: Regular expression HOWTO]
[python.org: Regular expressions]
[tutorialspoint.com: Python regexp összefoglaló]
Írjunk olyan reguláris kifejezéset, mely illeszkedik az alábbiakban megadott mintára!
Feladat: néggyel osztható 2-jegyű szám
[02468][048]|[13579][26]
Feladat: szökőév
([1-9][0-9])(0[48]|[2468][048]|[13579][26])|(([2468][048]|[13579][26])00)
Feladat: 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
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
"""
(
(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
)
"""
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()
>>> 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',)
Iterátor match objektumra:
>>> iterObj = re.finditer(r'\b(.+)\1\b', line, re.M|re.I) >>> >>> for j in iterObj: ... print j.group() ... gyöngyön elemelem
Helyettesítés:
>>> 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']
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]])