регулярное выражение python удаляет обратную косую черту

#python #regex

#python #регулярное выражение

Вопрос:

С помощью этого кода я получаю:

 newContent='asdf asdf nOUTPUT_DIRECTORY       = workingtopOnly'
  

Я бы ожидал, что это будет:

 newContent='asdf asdf nOUTPUT_DIRECTORY       = working\topOnly'
  

Reg ex удаляет """""" между """working""" и """topOnly""" . Если я делаю что-то подобное """valStr = 'working\ytopOnly'""" , то это работает так, как ожидалось.

Что мне нужно изменить в моем коде, чтобы он был таким, как ожидалось?

 import re

valStr = 'working\topOnly'
cmdFileContent = 'asdf asdf nOUTPUT_DIRECTORY       = asdf'
name = 'OUTPUT_DIRECTORY'

varRegEx = r"""
    (n          #match new line
    %s            #var
    s*           #skip white spaces
    =
    s?)          #skip white spaces
    (.*)          #match and store rest of line
    """%name

newContent  = re.compile(varRegEx, re.VERBOSE).sub(r'1%s'%valStr, cmdFileContent)
  

Комментарии:

1. реальный и ожидаемый результат одинаков в вопросе, пожалуйста, отредактируйте его.

Ответ №1:

В справке для re.sub говорится:

repl может быть либо строкой, либо вызываемым объектом; если строка, то в ней обрабатываются экранирования обратной косой черты.

Поскольку оно выполняет свой собственный уровень экранирования обработки, вам понадобится другой уровень экранирования:

 newContent = re.compile(varRegEx, re.VERBOSE).sub(r'1%s'%valStr.replace('\', '\\'), cmdFileContent)
  

Ответ №2:

Вообще не имеет ничего общего с reg-exp. Попробуйте это:

  valStr = 'working\topOnly'
 print valStr
  

Вы думаете, print это тоже «удаление» одной из ваших обратных косых черт? Может быть, это заговор!

Это просто сам анализатор Python. Как и почти любой анализатор языка, оно обрабатывает обратную косую черту как escape, поэтому g\t означает g-обратная косая черта-t, тогда как gt означает ‘g-tab’. Попробуйте

  valStr = 'working\\topOnly'
  

Комментарии:

1. Моя среда разработки показывает повторную версию strings. Решение Mu Mind работает. Спасибо за вашу помощь