Informatika2-2014/teszt
Példák reguláris kifejezésekre
Í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 függvény
re.match(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']