के आधार पर एक regexp के साथ 100% CPU उपयोग, मैं पाइथन में एक regexp के साथ आने की कोशिश कर रहा हूं जिसे किसी भी चरित्र से मेल खाना पड़ेगा लेकिन तीन या अधिक लगातार कॉमा या सेमीकॉलन से परहेज करना होगा। दूसरे शब्दों में, केवल दो लगातार कॉमा या सेमीकॉलन की अनुमति है।इनपुट लंबाई
^(,|;){,2}([^,;]+(,|;){,2})*$
और यह अपेक्षा के अनुरूप काम करने लगता है:
>>> r.match('')
<_sre.SRE_Match object at 0x7f23af8407e8>
>>> r.match('foo,')
<_sre.SRE_Match object at 0x7f23af840750>
>>> r.match('foo, a')
<_sre.SRE_Match object at 0x7f23af8407e8>
>>> r.match('foo, ,')
<_sre.SRE_Match object at 0x7f23af840750>
>>> r.match('foo, ,,a')
<_sre.SRE_Match object at 0x7f23af8407e8>
>>> r.match('foo, ,,,')
>>> r.match('foo, ,,,;')
>>> r.match('foo, ,, ;;')
<_sre.SRE_Match object at 0x7f23af840750>
लेकिन जैसा कि मैंने इनपुट पाठ की लंबाई बढ़ाने के लिए शुरू करते हैं, regexp लगता
तो यह मैं वर्तमान में क्या है प्रतिक्रिया देने के लिए और अधिक समय की आवश्यकता है।
>>> r.match('foo, bar, baz,, foo')
<_sre.SRE_Match object at 0x7f23af8407e8>
>>> r.match('foo, bar, baz,, fooooo, baaaaar')
<_sre.SRE_Match object at 0x7f23af840750>
>>> r.match('foo, bar, baz,, fooooo, baaaaar,')
<_sre.SRE_Match object at 0x7f23af8407e8>
>>> r.match('foo, bar, baz,, fooooo, baaaaar,,')
<_sre.SRE_Match object at 0x7f23af840750>
>>> r.match('foo, bar, baz,, fooooo, baaaaar,,,')
>>> r.match('foo, bar, baz,, fooooo, baaaaar,,,,')
>>> r.match('foo, bar, baz,, fooooo, baaaaar, baaaaaaz,,,,')
और आखिरकार यह इस चरण में पूरी तरह से अटक गया और सीपीयू उपयोग 100% तक चला गया।
मुझे यकीन नहीं है कि regexp को अनुकूलित किया जा सकता है या इसमें कुछ और शामिल है, किसी भी मदद की सराहना की।
होना चाहिए PyPI पर regex कार्यान्वयन बहुत कम इस तरह की समस्या से ग्रस्त है। – MRAB
थास एक महान स्पष्टीकरण था, इस मुद्दे की उत्पत्ति को जानना अच्छा लगा। मुझे लगता है कि मैं अब के लिए उलटा जांच के साथ जाऊंगा और regexp को छोड़ दें। धन्यवाद!! – julen