पदावनत: अवैध निकासी क्रम - \ _ के बजाय क्या उपयोग करना है?


106

मैं rePython 3.6.5 में मॉड्यूल के साथ एक समस्या से मिला हूं । मेरी नियमित अभिव्यक्ति में यह पैटर्न है:

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

लेकिन जब मैं इसे चलाता हूं, तो मुझे ए DeprecationWarning

मैं एसओ पर समस्या के लिए खोज की , और जवाब नहीं मिला है, वास्तव में - इसके बजाय मुझे क्या उपयोग करना चाहिए \d+? बस [0-9]+या शायद कुछ और?


2
यह समस्या नहीं होनी चाहिए, अधिक कोड प्रदान करें?
Sraw

3
डबल भागने \dया उपयोग r'\\nRevision: (\d+)\\n'?
रेवो

जवाबों:


176

पायथन 3 ने यूनिकोड स्ट्रिंग्स के रूप में स्ट्रिंग शाब्दिकों की व्याख्या की है, और इसलिए आपका \dबच गए यूनिकोड चरित्र के रूप में व्यवहार किया जाता है।

अपने RegEx पैटर्न rको नीचे बताए अनुसार प्रचलित करके कच्चे स्ट्रिंग के रूप में घोषित करें :

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

इसका मतलब यह भी है कि आप पलायन को भी छोड़ सकते हैं \nक्योंकि इनको केवल नए वर्णों द्वारा पार्स किया जाएगा re


8
थोड़ा अधिक सटीक होने के लिए, \dएक गैर-मान्यता प्राप्त भागने के क्रम के रूप में माना जाता है और जैसे कि अपरिवर्तित छोड़ दिया जाता है। पायथन 3.6 के बाद से एक डेप्रिसिएशन वर्निंग दी जाती है। पाइथन के कुछ भविष्य के संस्करण में यह एक सिंटैक्सएरोर होगा। डॉक्स में "2.4.1। स्ट्रिंग और बाइट्स शाब्दिक" से विवरण।
वीपीएफबी

@VPfB धागा पुराना है, लेकिन मैं उसी समस्या पर जवाब तलाश रहा था। यदि \ d को एक बच गए यूनिकोड वर्ण के रूप में माना जाता है, तो मैं कैसे रे स्ट्रिंग पैटर्न को रॉ स्ट्रिंग के रूप में व्यवहार किए बिना d (किसी भी अंक) से d (वर्णमाला वर्ण) को अलग करता हूं? (एक ही प्रश्न \ w, \ W आदि पर लागू होता है ...)
giulia_dnt

2
@ टॉगल अगर मैं आपके सवाल को सही तरह से समझ पा रहा हूं - तो अपने बैकस्लैश से बच जाएं, तो स्ट्रिंग पढ़ेगी '\\d'
एसीकेसिनो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.