6.2 match() срещу search()

Функцията match() само проверява дали този РИ пасва с началото на символния низ, а search() последователно обхожда символния низ, докато намери съвпадение. Важно е винаги да имате предвид това разграничение. Запомнете, че match() само ще докладва за успешно пасване, започващо от 0; ако пасването би започнало от някоя следваща позиция, match() няма да докладва за това.

>>> print re.match('super', 'superstition').span()  
(0, 5)
>>> print re.match('super', 'insuperable')    
None
От друга страна, search() ще претърси символния низ, докладвайки първото съвпадение, на което попадне.

>>> print re.search('super', 'superstition').span()
(0, 5)
>>> print re.search('super', 'insuperable').span()
(2, 7)
Понякога ще се изкушавате да продължавате да използвате re.match() като просто добавяте .* в началото на вашия РИ. Трябва да устоите на изкушението и вместо това да използвате re.search(). Компилаторът на регулярни изрази извършва няколко анализа на РИ с оглед да ускори процеса на съпоставяне. Един от тези анализи определя кой е първият символ, който трябва да пасне; например един образец, започващ с Crow, трябва да пасва започвайки със "C". Анализът позволява на машината бързо да претърси символния низ, за да открие началния символ, и после да съпоставя нататък само когато е открит такъв.

Добавянето на .* тушира тази оптимизация и изисква претърсване до края на символния низ и после връщане назад, докато се открие съвпадение за останалата част от РИ. Вместо това използвайте re.search().