Informatika2-2014/teszt

A MathWikiből
A lap korábbi változatát látod, amilyen Wettl (vitalap | szerkesztései) 2014. március 5., 12:07-kor történt szerkesztése után volt.

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]])
Személyes eszközök