2010-05-24 3 views
1

Вот код, я бегу:Python - Странное поведение в re.sub

import re 

FIND_TERM = r'C:\\Program Files\\Microsoft SQL Server\\90\\DTS\\Binn\\DTExec\.exe' 
rfind_term = re.compile(FIND_TERM,re.I) 

REPLACE_TERM = 'C:\\Program Files\\Microsoft SQL Server\\100\\DTS\\Binn\\DTExec.exe' 

test = r'something C:\Program Files\Microsoft SQL Server\90\DTS\Binn\DTExec.exe something' 

print rfind_term.sub(REPLACE_TERM,test) 

И результат я получаю:

something C:\Program Files\Microsoft SQL [email protected]\DTS\Binn\DTExec.exe something 

Почему есть знак @?

ответ

1

тростн двигатель обработка \100 в REPLACE_TERM как восьмеричный коде побега. Вам нужно избегать обратной косой черты, чтобы она обрабатывалась по желанию.

+1

Но я уже избегаю обратной косой черты. Зачем мне нужно бежать дважды? – Greg

+0

Вы избегаете обратной косой черты для Python. Вам все равно нужно сбежать от него для механизма 're', чтобы он не считался обратной или восьмеричной escape-последовательностью. –

2

Вы смешиваете исходные (r '') и обычные строки.

>>> FIND_TERM = r'C:\\Program Files\\Microsoft SQL Server\\90\\DTS\\Binn\\DTExec\.exe' 
>>> REPLACE_TERM = r'C:\\Program Files\\Microsoft SQL Server\\100\\DTS\\Binn\\DTExec.exe' 
>>> rfind_term = re.compile(FIND_TERM,re.I) 
>>> test = r'something C:\Program Files\Microsoft SQL Server\90\DTS\Binn\DTExec.exe something' 
>>> print rfind_term.sub(REPLACE_TERM,test) 
something C:\Program Files\Microsoft SQL Server\100\DTS\Binn\DTExec.exe something 
+1

Зачем вам нужны r 'и double backslahes в замене? Это потому, что думает, что заменить термин является регулярным выражением? – Greg

+0

да, именно это: http://docs.python.org/library/re.html – pycruft

Смежные вопросы