2009-03-03 29 views
13

क्या Python में नियमित अभिव्यक्ति डीबग करने का कोई तरीका है? और मैं कोशिश कर रहा है और कोशिश कर रहा करने की प्रक्रिया की बात नहीं कर रहा हूँ जब तक वे काम करते हैं :)मैं अजगर में नियमित अभिव्यक्ति कैसे डिबग कर सकता हूं?

संपादित करें: यहाँ कैसे regexes पर्ल में डिबग किया जा सकता है:


use re 'debug'; 

my $str = "GET http://some-site.com HTTP/1.1"; 
if($str =~/get\s+(\S+)/i) { 
    print "MATCH:$1\n"; 
} 

कोड ऊपर पर निम्नलिखित उत्पादन का उत्पादन मेरी कंप्यूटर जब भागा:


Compiling REx "get\s+(\S+)" 
Final program: 
    1: EXACTF (3) 
    3: PLUS (5) 
    4: SPACE (0) 
    5: OPEN1 (7) 
    7: PLUS (9) 
    8:  NSPACE (0) 
    9: CLOSE1 (11) 
    11: END (0) 
stclass EXACTF minlen 5 
Matching REx "get\s+(\S+)" against "GET http://some-site.com HTTP/1.1" 
Matching stclass EXACTF against "GET http://some-site.com HTTP/1.1" (33 chars) 
    0   | 1:EXACTF (3) 
    3  | 3:PLUS(5) 
            SPACE can match 1 times out of 2147483647... 
    4  | 5: OPEN1(7) 
    4  | 7: PLUS(9) 
            NSPACE can match 20 times out of 2147483647... 
    24  | 9: CLOSE1(11) 
    24  | 11: END(0) 
Match successful! 
MATCH:http://some-site.com 
Freeing REx: "get\s+(\S+)" 

+0

गंभीरता से: अपने रेगेक्स + नमूना डेटा दें? – annakata

+0

नमूना कोड के बिना, हम कर सकते हैं कि आपकी समस्या क्या है। –

+3

मेरे पास अभी एक regex समस्या नहीं है। मैं केवल डीबगिंग करने के बारे में जानना चाहता हूं। – Geo

उत्तर

17
 

>>> p = re.compile('.*', re.DEBUG) 
max_repeat 0 65535 
    any None 
>>>       
 

regex '|' operator vs separate runs for each sub-expression

+7

यह उत्तर का केवल आधा है, यह दिखाता है कि regexp क्या संकलित करता है, लेकिन यह नहीं दिखाता कि इसे कैसे निष्पादित किया गया है एक दिया स्ट्रिंग। अगर कोई अन्य आधा जानता है, तो कृपया साझा करें! – Nickolay

1

क्यों तुम कुछ regex उपकरण का उपयोग नहीं करते (मैं आमतौर पर Regulator का उपयोग करें) और वहाँ regex अभिव्यक्ति का परीक्षण करने और जब आप संतुष्ट हैं, बस कॉपी/इसे अपने कोड में चिपकाएं।

+0

क्योंकि रेगेक्स टूल का उपयोग करने से मुझे नहीं पता कि मेरा रेगेक्स क्यों काम नहीं कर रहा है। – Geo

+0

@ जीओओ - "काम नहीं कर रहा है" से आपका क्या मतलब है। बिल्कुल काम नहीं कर रहा है, उन चीजों से मेल नहीं खा रहा है जिन्हें आप मेल करना चाहते हैं या ...? – Rook

+1

स्पष्ट बताते हुए जोखिम के कारण, एक रेगेक्स टूल आपको यह नहीं बता सकता कि यह आपको सही मिलान क्यों नहीं दे रहा है। एक रेगेक्स ठीक वही करने जा रहा है जो आप इसे बताते हैं, और कोई भी उपकरण जो भी कर सकता है वह आपको चरणबद्ध करता है ताकि आप स्वयं को समझ सकें कि कौन सा बिट गलत है। – Noldorin

-1

सीधे पाइथन में ऐसी चीज करने के बारे में सुनिश्चित नहीं है, लेकिन मैं निश्चित रूप से एक RegEx संपादक टूल का उपयोग करने का सुझाव दे सकता हूं। वैसे भी यह आपकी सबसे अच्छी शर्त होने की संभावना है। व्यक्तिगत रूप से, मैंने The Regulator का उपयोग किया है और इसे बहुत उपयोगी पाया है। कुछ अन्य this SO thread में सूचीबद्ध हैं।

0

को पहले ही उल्लेख किया इसी प्रकार, वहाँ भी Regexbuddy

-1

मैं अक्सर त्वरित जांच के लिए RegexPal (एक ऑनलाइन नियमित अभिव्यक्ति prototyper) का उपयोग है। इसमें एक साधारण अभिव्यक्ति के साथ सूचीबद्ध कई सामान्य अभिव्यक्तियां हैं। बहुत आसान जब आपके पास एक समर्पित उपकरण नहीं है और केवल कुछ रेगेक्स को काम करने के लिए एक त्वरित तरीका चाहिए।

+0

डाउन-वोट क्यों? –

0

क्या RegexBuddy है कि अन्य टूल्स में कोई अंतर्निहित debugger है जो आपको सफल और असफल मिलान प्रयासों की पूरी मिलान प्रक्रिया दिखाता है। अन्य उपकरण केवल अंतिम परिणाम दिखाते हैं (जो रेगेक्सबड्डी भी दिखा सकता है)।

1

https://www.debuggex.com भी बहुत अच्छा है। यह एक ऑनलाइन पायथन (और कुछ और भाषाओं) डीबगर है, जिसमें एक सुंदर साफ दृश्यता है कि क्या करता है और क्या मेल नहीं खाता है। यदि आपको जल्दी से regexp ड्राफ्ट करने की आवश्यकता है तो एक बहुत अच्छा संसाधन।

+2

ओह, यह बहुत नीचे का सबसे अच्छा जवाब है, मुझे खुशी है कि मैंने यहां खोद दिया।यह एक अच्छा टूल है, यह मुफ़्त है, यह ऑनलाइन है (कोई इंस्टॉल नहीं, ओएस-स्वतंत्र) और यह एक झपकी में मेरी समस्या (एक बेवकूफ टाइपो] की बजाय हल)! धन्यवाद! – Davide

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

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