DeprecationWarning: ลำดับการหลีกไม่ถูกต้อง - จะใช้อะไรแทน \ d?


113

ฉันพบปัญหากับreโมดูลใน Python 3.6.5 ฉันมีรูปแบบนี้ในนิพจน์ทั่วไปของฉัน:

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

แต่เมื่อฉันเรียกใช้ฉันจะได้รับไฟล์DeprecationWarning.

ฉันค้นหาปัญหาใน SOแต่ไม่พบคำตอบจริง ๆ แล้วฉันควรใช้\d+อะไรแทนดี เฉยๆ[0-9]+หรืออาจจะเป็นอย่างอื่น?


2
ไม่ควรเป็นปัญหาให้รหัสเพิ่มเติมหรือไม่?
Sraw

3
ดับเบิ้ลหนี\dหรือใช้r'\\nRevision: (\d+)\\n'?
revo

คำตอบ:


186

Python 3 ตีความตัวอักษรสตริงเป็นสตริง Unicode ดังนั้นของคุณจึง\dถือว่าเป็นอักขระ Unicode ที่ใช้ Escape

ประกาศรูปแบบ RegEx ของคุณเป็นสตริงดิบแทนโดยการป้อนล่วงหน้าrดังต่อไปนี้:

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

นอกจากนี้ยังหมายความคุณสามารถวางหนีสำหรับเช่นกันตั้งแต่เหล่านี้ก็จะถูกแยกเป็นตัวอักษรขึ้นบรรทัดใหม่โดย\nre


9
เพื่อให้แม่นยำขึ้นอีกเล็กน้อย\dจะถือว่าเป็นลำดับการหลีกเลี่ยงที่ไม่รู้จักและจะไม่เปลี่ยนแปลง DeprecationWarning จะได้รับตั้งแต่ Python 3.6 ในบางเวอร์ชันของ Python ในอนาคตจะเป็น SyntaxError รายละเอียดจาก "2.4.1. String และ Bytes literals" ในเอกสาร
VPfB

@VPfB เธรดเก่า แต่ฉันกำลังมองหาคำตอบสำหรับปัญหาเดียวกัน ถ้า \ d ถือว่าเป็นอักขระ Unicode ที่ใช้ Escape ฉันจะแยกแยะ d (อักขระตามตัวอักษร) จาก \ d (ตัวเลขใดก็ได้) โดยไม่ถือว่ารูปแบบ regex เป็นสตริงดิบได้อย่างไร (คำถามเดียวกันนี้ใช้กับ \ w, \ W ฯลฯ ... )
giulia_dnt

2
@theggg ถ้าผมเข้าใจคำถามของคุณได้อย่างถูกต้อง - '\\d'หนีทับขวาของคุณเพื่อให้สตริงจะอ่าน
ACascarino
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.