python - pyparsing: when ignoring comments, parseAll=True does not throw a ParseException -
मैंने पाइपेर्सिंग में एक अजीब साइड इफेक्ट देखा:
जब एक सुपरसेट पर। एक पार्सर का, parseString (..., parseAll = True) टिप्पणी चिन्ह पर पूरे स्ट्रिंग की जांच करना बंद हो जाता है। नीचे दिए गए कोड द्वारा बेहतर समझाया गया।
मैं स्ट्रिंगएंड का उपयोग किए बिना कैसे ठीक कर सकता हूं?
उदाहरण:
डीईफ़ टेस्ट (): आयात के रूप में पीपर्सिंग unquoted_exclude = "\\\" "+" ': / | & lt; & gt;; # " Unquoted_chars = '' .जोइंड (सेट (पी .प्रिन्टबल्स) - सेट (अनक्ॉटेड_एक्सअलिएइ)) अनक्ॉटेडकी = पी। वर्ड (अनक्ॉटेड_चर्स) अधिक = पी। ओनऑरोर (अन्वोटेडकी) अधिक.इग्नेर ("#" + पी .स्टोफ़लाइन) # ^ ^ "अधिक" टिप्पणियों की अनदेखी करनी चाहिए, लेकिन "अनक्ॉटेडकी" !! डीईएफ़ पार्स (पार्सर, इनपुट_, पार्स = सभी = ट्रू): कोशिश करें: प्रिंट इनपुट_ प्रिंट पार्सर.पर्सेस्ट्रेस (इनपुट_, पार्स एल) .एसएलआईएस () अपवाद को छोड़कर त्रुटि के रूप में: पार्स (अनक्ॉटिडकी, "एबीसी # डी") पार्स (अनक्ॉटिडकी, "एबीसी | डी") withstringend = unquotedkey + p.stringEnd parse (withstringend, "abc # d", गलत) पार्स (withstringend, "abc | d", false ) आउटपुट:
abc # d ['abc'] & lt; --- एक अपवाद फेंकना चाहिए लेकिन abc नहीं। D अपेक्षित स्ट्रिंगएंड (3 पर), पाठ के अंत में अपेक्षित अंत (3 वर्णों पर), (पंक्ति: 1, कोलाः 4) एबीसी # डी अपेक्षित स्ट्रिंग एन्ड (3 पर), (लाइन: 1, कोलाः 4) एबीसी डी) (रेखा: 1, कोला: 4)
बहिष्कृत शब्द तर्क वर्ड क्लास में जोड़ा गया था। अब आपको केवल अनुमति वाले पात्रों की सूची बनाने के आसपास गड़बड़ करने की जरूरत नहीं है, आप वर्ड को काम कर सकते हैं कोशिश करें: unquotedKey = p.Word (पीप्रिन्टबल्स, excludeChars = r '\ "' +" ': / | & lt; & gt;; "#")
Comments
Post a Comment