#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 работает. Спасибо за вашу помощь