Why no match?

Alex Martelli aleax at aleax.it
Mon Dec 17 16:11:32 EST 2001


Robin Becker wrote:

> I'm puzzled as to why the second of these pattern matches fails. They
> only differ in that the second is supposed to match to the end of line.
> Can any regexpert supply an answer?

While waiting for regexperts, here's my take on it:

>>>> import re
>>>> re.compile(r'^self\s*\.\s*test\s*=\s*\d\s*').match('self.test=11')
> <SRE_Match object at 010711F8>

Sure, this matches -- look at the end of the pattern: an equal sign, 0 or 
more spaces, one digit, zero or more spaces, no constraints on what comes 
after.  This part I just described in words matches the '=1' part of the 
argument to method match, no?

>>>> re.compile(r'^self\s*\.\s*test\s*=\s*\d\s*$').match('self.test=11')
>>>> 

But this specifies that the string ends after the match, and it doesn't, as 
it has an extra digit '1' at the end.  So, the result is None.

Maybe you want \d+ (one *or more* digits) in the pattern rather than just 
\d (*exactly* one digit) as you have now?


Alex





More information about the Python-list mailing list