Какво да правим, след като вече сме получили обект, отговарящ на един компилиран регулярен израз? Инстанциите на RegexObject имат няколко метода и атрибута. Тук ще бъдат обсъдени само най-важните от тях. За пълния им списък се посъветвайте с Library Reference.
Метод/Атрибут | Предназначение |
---|---|
match |
Определя дали този РИ пасва с началото на символен низ. |
search |
Обхожда символен низ, търсейки място, което пасва с този РИ. |
split |
Разцепва символния низ като списък, разделяйки го на местата, където пасва този РИ. |
sub |
Намира всички места, които пасват с този РИ, и ги замества с различен символен низ. |
subn |
Прави същото като sub(), с тази разлика, че можете да ограничите броя на заместванията. |
Ако не е открито съвпадение, тези методи връщат None
. Ако са преминали
успешно, връща се инстанция на MatchObject
, съдържаща информация за
съвпадението: къде е неговото начало и край, поднизът който е паснал, и
прочие.
Можете да усвоите това като експериментирате диалогово с модула re. (Ако е достъпен Tkinter, може би ще пожелаете да погледнете и redemo.py - демонстрационна програма, включена в дистрибуцията на Питон. Тя ви позволява да въвеждате РИ и символни низове, като показва дали РИ пасва или се проваля. redemo.py може да бъде много полезен, когато се опитвате да остранявате грешки от някой сложен РИ.)
Първо, стартирайте интерпретатора на Питон, импортирайте модула re, и компилирайте един РИ:
Python 1.5.1 (#6, Jul 17 1998, 20:38:08) [GCC 2.7.2.3] on linux2 Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam >>> import re >>> p = re.compile('[a-z]+') >>> p <re.RegexObject instance at 80c3c28>
None
, което ще накара
интерпретатора да не изведе никакъв изход. За да стане очевидно, можете
изрично да изведете резултата от match().
>>> p.match( "" ) >>> print p.match( "" ) None
>>> m = p.match( 'tempo') >>> print m <re.MatchObject instance at 80c4f68>
Метод/Атрибут | Предназначение |
---|---|
group() |
Връща символния низ, паснал с този РИ |
start() |
Връща началната позиция на съвпадението |
end() |
Връща крайната позиция на съвпадението |
span() |
Връща комплект, съдържащ (начало, край) на съвпадението |
Опитите с тези методи бързо ще изясни значението им:
>>> m.group() 'tempo' >>> m.start(), m.end() (0, 5) >>> m.span() (0, 5)
>>> print p.match('::: message') None >>> m = p.search('::: message') ; print m <re.MatchObject instance at 80c9650> >>> m.group() 'message' >>> m.span() (4, 11)
None
.
Това обикновено става така:
p = re.compile( ... ) m = p.match( 'тук е символния низ' ) if m: print 'Намерено е съвпадение: ', m.group() else: print 'няма съвпадение'