2008-09-03 16 views
39

अजगर डॉक्स कहना प्रतिस्थापित नहीं करता:अजगर re.sub सभी घटनाओं

re.MULTILINE: जब निर्दिष्ट, पैटर्न चरित्र '^' स्ट्रिंग की शुरुआत में मेल खाता है और शुरुआत में प्रत्येक पंक्ति (तुरंत प्रत्येक नई लाइन के बाद) ... डिफ़ॉल्ट रूप से, '^' केवल स्ट्रिंग की शुरुआत में ही मेल खाता है ...

तो मुझे निम्न अप्रत्याशित परिणाम मिलने पर क्या चल रहा है? re.sub की परिभाषा को

>>> import re 
>>> s = """// The quick brown fox. 
... // Jumped over the lazy dog.""" 
>>> re.sub('^//', '', s, re.MULTILINE) 
' The quick brown fox.\n// Jumped over the lazy dog.' 

उत्तर

93

देखो:

sub(pattern, repl, string[, count]) 

4 तर्क गणना, है आप re.MULTILINE उपयोग कर रहे हैं (जो 8) गिनती के रूप में, नहीं एक ध्वज के रूप में।

यदि आप झंडे का उपयोग करना चाहते हैं तो आपको अपने रेगेक्स को संकलित करना होगा।

re.sub(re.compile('^//', re.MULTILINE), '', s) 

एक flags तर्क अजगर 2.7 में जोड़ा गया है, ताकि पूरी परिभाषा है:

re.sub(pattern, repl, string[, count, flags]) 

जिसका मतलब है कि:

re.sub('^//', '', s, flags=re.MULTILINE) 

काम करता है।

+6

're.compile ('^// ', re.M) .sub (' ', s) ' – SilentGhost

+0

होना बेहतर होगा, अगर आप इसे ध्वजांकित करते हैं तो आपको संकलित करने की आवश्यकता नहीं है इसे – pseudosudo

+5

@pseudosudo फ़्लैग तर्कों को पाइथन 2.7 में जोड़ा गया था, जो इस उत्तर को पोस्ट करते समय मौजूद नहीं था। मैंने जवाब में जानकारी जोड़ दी है। – agf

5

re.sub से भरा परिभाषा है:

re.sub(pattern, repl, string[, count, flags]) 

इसका मतलब है कि अगर आप अजगर बताओ क्या मापदंड हैं, तो आप flagscount गुजर बिना पारित कर सकते हैं:

re.sub('^//', '', s, flags=re.MULTILINE) 

या , अधिक संक्षेप में:

re.sub('^//', '', s, flags=re.M) 
+0

मेरी टिप्पणी देखें और दूसरे उत्तर में संपादित करें। – agf

+1

@agf आह, मैंने तारीख को देखने के लिए नहीं सोचा था। – pseudosudo

संबंधित मुद्दे