2011-05-03 21 views
9

मुझे कुछ ऐसा पता चला है जिसे मैं पायथन रे मॉड्यूल में समझा नहीं सकता।पायथन रेगेक्स अजीब व्यवहार

raise error, v # invalid expression sre_constants.error: nothing to repeat

मैं जावास्क्रिप्ट में इस regexp परीक्षण किया है और यह ठीक हो रहा है: (a*)* या (a*|b)* की संकलन एक त्रुटि फेंकता है।

क्या यह एक बग है?

+2

संबंधित: http://stackoverflow.com/questions/3675144/regex-error-nothing-to-repeat – Kobi

+0

आपका पायथन संस्करण क्या है? – lzap

+1

मैं जोड़ूंगा: तार्किक रूप से, इनमें से कोई भी समझ में नहीं आता है। '(ए *) *' '* * के समान है, और' (ए * | बी) * '' [ab] * '(या' (ए | बी) * 'जैसा ही है। क्या जिज्ञासा से बाहर एक अच्छा उपयोग मामला है? – Kobi

उत्तर

9

हां, यह एक बग है (या कम से कम एक गलतफहमी)। यह शिकायत कर रहा है कि यदि a* कुछ भी मेल नहीं खाता है, तो यह नहीं जानता कि 0 या अधिक "नोटिंग" कैप्चर कैसे करें।

5

पायथन में एक बग।

http://bugs.python.org/issue2537

http://bugs.python.org/issue214033

हो सकता है कि एक "बग" सही शब्द यहाँ नहीं है। विभिन्न प्रकार की व्याख्या ...

+1

वाह नहीं चाहते हैं! मुझे अपने जीवन में पाइथन में पहली बग मिली है =) – f0b0s

5

a* शून्य हो सकता है, (null)* दे रहा है जो दुभाषिया को कोई समझ नहीं आता है। (a*|b) भी रूप में यह या तो (b) या (a*) को मूल्यांकन कर सकते हैं अशक्त हो सकता है.आप (a+)* इस्तेमाल कर सकते हैं और इसलिए (a+|b)*

+0

मैं बिल्कुल आपके साथ सहमत हूं, लेकिन वैसे भी मुई माइंड सही है। – f0b0s

+0

@ f0b0s अनिवार्य रूप से @ एमयू और मैं एक ही बात कह रहा हूं - केवल अंतर ही स्पष्ट रूप से है - यही कारण है कि मैंने उसे पहले प्राप्त करने के लिए उकसाया। आपकी व्याख्या के लिए – theheadofabroom

+0

Thanx। – f0b0s

1

वास्तव में पाइथन (a*)*, और (a*|b)* को अस्वीकार करने का एक महत्वपूर्ण कारण है। चूंकि * लालची है, यह सबसे लंबी स्ट्रिंग से मेल खाता है। समस्या यह है कि यदि * द्वारा संशोधित रेगेक्स खाली है, तो नियमित अभिव्यक्ति पार्सर जितना संभव हो सके खाली स्ट्रिंग के कई पुनरावृत्ति मिलान करने का प्रयास करता है। इसका मतलब है कि यह आपके द्वारा परीक्षण की जाने वाली स्ट्रिंग में किसी भी दो वर्णों के बीच किसी भी खाली स्ट्रिंग से मेल खाएगा। चूंकि a* कैप्चरिंग समूह में है, इसलिए उन्हें उन सभी खाली तारों को कैप्चर करना होगा, जो असंभव होगा।

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