अजगर re.sub समूह: संख्या \ after के बाद


183

मैं कैसे बदल सकते हैं foobarके साथ foo123bar?

यह काम नहीं करता है:

>>> re.sub(r'(foo)', r'\1123', 'foobar')
'J3bar'

यह काम:

>>> re.sub(r'(foo)', r'\1hi', 'foobar')
'foohibar'

मुझे लगता है कि ऐसा कुछ होने पर एक आम मुद्दा है \number। क्या कोई मुझे बता सकता है कि इसे कैसे संभालना है?


2
यह प्रश्न "समूह" के तहत स्टैक ओवरफ्लो रेगुलर एक्सप्रेशन एफएक्यू में जोड़ा गया है ।
aliteralmind

1
इस सवाल ने मुझे ढूंढने में काफी लंबा समय लिया, क्योंकि इसमें 'कैप्चर ग्रुप' या 'गिने हुए ग्रुप रेफरेंस' जैसे शब्द नहीं हैं, लेकिन मैं यहां आखिरकार हूं और आपने इसे पूछा है।
मार्क च

1
आपका मुद्दा यह है कि आर '\ 112' अष्टाधारी शाब्दिक 0112, ASCII'J के रूप में व्याख्या हो रही है \ 1 ', या दशमलव 74 कैसे backreference मजबूर करने के लिए नहीं देख सकता' स्ट्रिंग संयोजन या उससे पहले का मूल्यांकन करने के लिए है''.join()
एसएमसीआई

प्रश्न से एक छोटा सा विचलन, सभी ग्रुप मैचों को संदर्भित करने का कोई तरीका अर्थात r '\ <सभी मैचों के लिए> हाय'?
सयान डे

जवाबों:


313

उत्तर है:

re.sub(r'(foo)', r'\g<1>123', 'foobar')

डॉक्स से प्रासंगिक अंश:

जैसा कि ऊपर वर्णित चरित्र पलायन और बैकरेफरेंस के अलावा, \ g नाम से समूह के नाम से मिलान किए गए सबस्ट्रिंग का उपयोग करेगा, जैसा कि (? P ...) सिंटैक्स द्वारा परिभाषित किया गया है। \ g संबंधित समूह संख्या का उपयोग करता है; \ g <2> इसलिए \ 2 के बराबर है, लेकिन प्रतिस्थापन में अस्पष्ट नहीं है जैसे कि \ g <2> 0। \ 20 को समूह 20 के संदर्भ के रूप में व्याख्या किया जाएगा, समूह 2 के संदर्भ के लिए नहीं, इसके बाद शाब्दिक चरित्र '0' का उल्लेख किया जाएगा। आरई द्वारा मिलान किए गए पूरे सबरिंग में बैकरेफेरेंस \ जी <0> विकल्प हैं।


48
अपने आप पर इतना कठोर मत बनो। यह प्रलेखन में इतना गहरा दफन है कि यह डॉक्स पढ़ने के लिए ज्यादातर लोगों को अपना प्रश्न Google से दूर करने में अधिक समय लगेगा और यह उत्तर SO पर आया है।
स्पीडप्लेन

1
सटीक प्रदान की बोली पाया जाता है यहाँ मामले में आप संदर्भ के लिए देख रहे हैं
पैट्रिक

क्या मैं समूह ले सकता हूं और इसे संशोधित कर सकता हूं? \ g <1> ... उदाहरण के लिए इस मामले में g <1> foo है, लेकिन मैं इस तरह से "
फू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.