Python-re.sub中的奇怪行为
以下是我正在运行的代码:Python-re.sub中的奇怪行为,python,regex,Python,Regex,以下是我正在运行的代码: 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'somethi
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
为什么会有@符号?您正在混合原始(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
RE引擎正在将
REPLACE_TERM
中的\100
视为八进制转义码。您需要避开反斜杠,以便按需要处理。为什么在替换术语中需要r'和双反斜杠?是因为它认为替换项是一个正则表达式吗?但我已经摆脱了反斜杠。为什么我要逃避两次呢?你在逃避Python的反斜杠。您仍然需要为re
引擎转义它,这样它就不会被认为是一个反向引用或八进制转义序列。