Regular expression confusion
yorklee70 at gmail.com
Sun Sep 24 08:54:25 CEST 2006
Oh, that's right, the second arg is escaped by re compiler too.
Thank you, John.
John Machin wrote:
> York wrote:
>>I have two backslash - a. and I want to replace them with one backslash,
>>but I failed:
>> >>> import re
>> >>> a = '\\\\'
>> >>> re.sub(r'\\\\', '\\', '\\\\')
>>Traceback (most recent call last):
>> File "<stdin>", line 1, in ?
>> File "/usr/lib/python2.3/sre.py", line 143, in sub
>> return _compile(pattern, 0).sub(repl, string, count)
>> File "/usr/lib/python2.3/sre.py", line 258, in _subx
>> template = _compile_repl(template, pattern)
>> File "/usr/lib/python2.3/sre.py", line 245, in _compile_repl
>> raise error, v # invalid expression
>>sre_constants.error: bogus escape (end of line)
>>anybody knows why?
> Yep. There are *two* levels of escaping happening (1) Python compiler
> (2) re compiler (in the first two args, but of course only Python in
> the 3rd).
> To get your single backslash you need to start out with four cooked or
> two raw:
> | >>> re.sub(r'\\\\', '\\\\', '\\\\')
> | >>> re.sub(r'\\\\', r'\\', '\\\\')
More information about the Python-list