how python interprets re matches
Fredrik Lundh
fredrik at pythonware.com
Thu Dec 15 16:05:49 EST 2005
Mike Rennie wrote:
> I'm still relatively new to the language, so I hope this question isn't too
> naive. It's a general question for anyone who might have some insights on
> Regular Expressions.
>
> According to Mark Pilgrim, author of "Dive Into Python", "If the regular
> expression matches, the method will return a Match object, which Python
> considers to be true" (Section 16.3, Example 16.8).
>
> So, I think "great", and write a function that returns a match object using
> re's.
>
> So i make some testcases. The test where there is no match, and the return from
> the function is None, passes.
>
> The test where there is a match, fails on the assertion:
>
> AssertionError: <_sre.SRE_Match object at 0x00AFB9C0> != True
>
> But, shouldn't it accept that as True, based on the info. in Dive Into Python?
"consider to be true" doesn't mean "is True", it means that it's interpreted
as a true value by Python, when Python checks for a truth value:
http://docs.python.org/lib/truth.html
> I suspect I am being naive in my interpretation of things, so if anyone has any
> feedback on how I might get this to work so my function just returns either
> True (if a match) or False (if no match), I welcome it.
bool(re.search(...))
but if you want to check if you have a match, just use the match object.
m = re.search(...)
if m:
match
else:
no match
if not m:
no match
explicitly comparing to boolean constants makes your program more fragile
than it should be. from the style guide:
http://www.python.org/peps/pep-0008.html
Don't compare boolean values to True or False using ==
Yes: if greeting:
No: if greeting == True:
Worse: if greeting is True:
</F>
More information about the Python-list
mailing list