DeprecationCảnh báo: chuỗi thoát không hợp lệ - sử dụng gì thay vì \ d?


106

Tôi đã gặp sự cố với remô-đun trong Python 3.6.5. Tôi có mẫu này trong biểu thức chính quy của mình:

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

Nhưng khi tôi chạy nó, tôi nhận được một DeprecationWarning.

Tôi đã tìm kiếm vấn đề trên SO , và thực sự không tìm thấy câu trả lời - tôi nên sử dụng cái gì thay thế \d+? Chỉ [0-9]+hoặc có thể một cái gì đó khác?


2
Nó không phải là vấn đề, cung cấp thêm mã?
Sraw

3
Thoát kép \dhay sử dụng r'\\nRevision: (\d+)\\n'?
revo

Câu trả lời:


176

Python 3 diễn giải các ký tự chuỗi là chuỗi Unicode, và do đó, của bạn \dđược coi là một ký tự Unicode thoát.

Khai báo mẫu RegEx của bạn dưới dạng một chuỗi thô thay vì thêm trước r, như sau:

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

Điều này cũng có nghĩa là bạn cũng có thể bỏ các đoạn thoát \nvì chúng sẽ chỉ được phân tích cú pháp thành các ký tự dòng mới bởi re.


8
Nói chính xác hơn một chút, \dđược coi là một chuỗi thoát không được công nhận và như vậy được giữ nguyên. Cảnh báo Deprecation được đưa ra kể từ Python 3.6. Trong một số phiên bản Python trong tương lai, nó sẽ là SyntaxError. Chi tiết từ "2.4.1. Chuỗi và ký tự byte" trong Tài liệu.
VPfB

@VPfB chủ đề đã cũ, nhưng tôi đang tìm kiếm câu trả lời cho cùng một vấn đề. Nếu \ d được coi là một ký tự Unicode thoát, làm cách nào để phân biệt d (ký tự chữ cái) với \ d (bất kỳ chữ số nào) mà không coi mẫu regex là chuỗi thô? (Câu hỏi tương tự áp dụng cho \ w, \ W vv ...)
giulia_dnt

2
@theggg Nếu tôi hiểu câu hỏi của bạn một cách chính xác - hãy thoát khỏi dấu gạch chéo ngược của bạn, vì vậy chuỗi sẽ đọc '\\d'.
ACascarino
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.