Informatika2-2014/teszt
67. sor: | 67. sor: | ||
[[http://www.tutorialspoint.com/python/python_reg_expressions.htm Python regexp összefoglaló]] | [[http://www.tutorialspoint.com/python/python_reg_expressions.htm Python regexp összefoglaló]] | ||
+ | |||
+ | === 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() | ||
+ | |||
+ | <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',) | ||
+ | >>> iterObj = re.finditer(r'\b(.+)\1\b', line, re.M|re.I) | ||
+ | >>> | ||
+ | >>> for j in iterObj: | ||
+ | ... print j.group() | ||
+ | ... | ||
+ | gyöngyön | ||
+ | elemelem | ||
+ | >>> 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 lap 2014. március 4., 23:45-kori változata
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',) >>> iterObj = re.finditer(r'\b(.+)\1\b', line, re.M|re.I) >>> >>> for j in iterObj: ... print j.group() ... gyöngyön elemelem >>> 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']