Problem with RE matching backslash

Peter Otten __peter__ at web.de
Tue Jan 27 12:56:13 EST 2004


Jeff Epler wrote:

>> What is still not clear to me is why  the search examples work and yield
>> 'm'.
> 
> Because the first pattern, which you wrote as "\\m", will match a lone
> 'm'.  So 'match' fails, because m is not in the first position.  But
> 'search' succeeds at index 1.
> 
> Jeff

This was my first guess, but it took me a while do find it documented. 
I will reproduce the tiny relevant paragraph from 

http://www.python.org/doc/current/lib/re-syntax.html

"The special sequences consist of "\" and a character from the list below.
If the ordinary character is not on the list, then the resulting RE will
match the second character. For example, \$ matches the character "$". "
[description of characters with special meaning omitted]

I don't know if this list of characters is likely to grow, but I would
definitely prefer a "bogus escape" exception:

>>> re.compile("\\m")
<_sre.SRE_Pattern object at 0x40289660>

versus

>>> re.compile("\\1")
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "/usr/local/lib/python2.3/sre.py", line 179, in compile
    return _compile(pattern, flags)
  File "/usr/local/lib/python2.3/sre.py", line 229, in _compile
    raise error, v # invalid expression
sre_constants.error: bogus escape: '\\1'


Peter



More information about the Python-list mailing list