Необработанная строка в регулярном выражении Python с использованием пути к папке Windows - PullRequest
3 голосов
/ 15 марта 2012

Попытка использовать обратную косую черту в необработанных строках с помощью этого регулярного выражения:

import re
print re.sub(r'^[a-zA-Z]:\\.+(\\Data.+)', r'D:\folder\1', r'C:\Some\Path\Data\File.txt')

Ожидаемый результат:

D:\folder\Data\File.txt

Однако \f интерпретируется.Есть ли способ сделать это без преобразования в косую черту?

Ответы [ 2 ]

2 голосов
/ 11 декабря 2013

Чтобы избежать перевода специальных символов, вы можете использовать лямбда-функцию:

print re.sub(r'^[a-zA-Z]:\\.+(\\Data.+)', lambda x: r'D:\\folder\1', r'C:\Some\Path\Data\File.txt')    
2 голосов
/ 15 марта 2012

re.sub интерпретирует escape-последовательности в строке замены ( docs ).Добавление дополнительной обратной косой черты перед \ f, чтобы избежать обратной косой черты, похоже, помогает:

import re
print re.sub(r'^[a-zA-Z]:\\.+(\\Data.+)', r'D:\\folder\1', r'C:\Some\Path\Data\File.txt')

Если ваша замещающая строка динамическая, вы всегда можете использовать другое регулярное выражение для экранирования обратной косой черты или использовать str.encode'юникода-побег').

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