6.3 Лакоми срещу не-лакоми

Когато повтаряте един регулярен израз, напр. a*, стремежът е да се консумира колкото се може повече от образеца. Този факт често ще ви спъва, когато се опитвате да напаснете чифт балансирани разделители, като например счупените скоби около един HTML таг. Наивният образец за пасване с един HTML таг не работи, заради лакомата природа на .*:

>>> s = '<html><head><title>Title</title>'
>>> len(s)
32
>>> print re.match('<.*>', s).span()
(0, 32)
>>> print re.match('<.*>', s).group()
<html><head><title>Title</title>
В началото РИ пасва с "<" от "<html>", а после .* консумира останалата част от символния низ. Но от РИ остава още нещо, и понеже > не може да пасне след края на символния низ, машината за регулярни изрази трябва да се върне назад символ по символ, докато намери съпвадение с >. Така окончателното съвпадение се разпростира от "<" в "<html>" до ">" в "</title>", което съвсем не е това, което сме имали предвид.

>>> print re.match('<.*?>', s).group()
<html>