DeprecationWarning: недопустимая escape-последовательность - что использовать вместо \ d?


106

У меня возникла проблема с reмодулем в Python 3.6.5. В моем регулярном выражении есть этот шаблон:

'\\nRevision: (\d+)\\n'

Но когда я его запускаю, я получаю файл DeprecationWarning.

Я искал проблему на SO , и, собственно, не нашел ответа - что мне использовать вместо \d+? Просто [0-9]+или может что-то еще?


2
Это не должно быть проблемой, предоставить больше кода?
Sraw

3
Двойной выход \dили использование r'\\nRevision: (\d+)\\n'?
revo

Ответы:


176

Python 3 интерпретирует строковые литералы как строки Unicode, и поэтому ваш \dкод рассматривается как экранированный символ Unicode.

Вместо этого объявите свой шаблон RegEx как необработанную строку, добавив его r, как показано ниже:

r'\nRevision: (\d+)\n'

Это также означает, что вы также можете отбросить \nescape-символы, поскольку они будут анализироваться как символы новой строки re.


8
Чтобы быть немного более точным, \dрассматривается как нераспознанная escape-последовательность и, как таковая, остается без изменений. Предупреждение об устаревании выдается, начиная с Python 3.6. В какой-то будущей версии Python это будет SyntaxError. Подробности из "2.4.1. Строковые и байтовые литералы" в Документах.
VPfB

@VPfB ветка старая, но я искал ответы по той же проблеме. Если \ d рассматривается как экранированный символ Unicode, как отличить d (алфавитный символ) от \ d (любой цифры), не рассматривая шаблон регулярного выражения как необработанную строку? (Тот же вопрос относится к \ w, \ W и т. Д.)
giulia_dnt

2
@theggg Если я правильно понял ваш вопрос - избегайте обратной косой черты, чтобы строка была прочитана '\\d'.
ACascarino
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.