Regular expression confusion
York
yorklee70 at gmail.com
Sun Sep 24 02:54:25 EDT 2006
Oh, that's right, the second arg is escaped by re compiler too.
Thank you, John.
York
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'\\', '\\\\')
> '\\'
>
> Cheers,
> John
>
More information about the Python-list
mailing list