DeprecationWarning: недійсна послідовність екрану - що використовувати замість \ 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'

Це також означає, що ви можете також скинути екрани \n, оскільки вони просто будуть проаналізовані як символи нового рядка re.


8
Якщо бути трохи точнішим, \dце трактується як невизнана послідовність втечі і як така залишається незмінною. Попередження щодо припинення дії надається з 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.