Python - странное поведение в re.sub - PullRequest
1 голос
/ 24 мая 2010

Вот код, который я запускаю:

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 Server@\DTS\Binn\DTExec.exe something

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

Ответы [ 2 ]

2 голосов
/ 24 мая 2010

Вы смешиваете необработанные (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 голос
/ 25 мая 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...