से अधिक से अधिक संख्या की एक श्रृंखला से मेल खाते हैं मैं इस तरह कुछ डेटा है कहते हैं:regex संख्यात्मक डेटा प्रसंस्करण: एक्स
number_stream = [0,0,0,7,8,0,0,2,5,6,10,11,10,13,5,0,1,0,...]
मैं इसे संसाधित करने के लिए "बम्प्स" कि एक निश्चित पैटर्न को पूरा की तलाश करना चाहते हैं।
कल्पना कीजिए संख्या पर काम कर रहा है, जहां [[> = 5]] का प्रतिनिधित्व करता है के लिए मैं अपने खुद के अनुकूलित regex भाषा है किसी भी संख्या> = 5. मैं इस मामले पर कब्जा करना चाहते हैं:
([[ >=5 ]]{3,})[[ <3 ]]{2,}
दूसरे शब्दों में, मैं किसी भी समय मैं आगे देखने के लिए और एक पंक्ति में 3 या उससे अधिक मूल्यों> = 5 देखें कब्जा शुरू होते हैं और किसी भी समय मैं आगे देख कर आपको 2 + महत्व देता है पर कब्जा बंद करना चाहते हैं < 3. तो मेरी उत्पादन किया जाना चाहिए:
>>> stream_processor.process(number_stream)
[[5,6,10,11,10,13,5],...]
ध्यान दें कि पहले 7,8,...
को अनदेखा किया गया है क्योंकि यह एल नहीं है पर्याप्त मात्रा में, और कैप्चर 0,1,0...
से पहले समाप्त होता है।
मुझे stream_processor
ऑब्जेक्ट भी पसंद है, मैं बाद में process
कॉल में अधिक डेटा पास कर सकता हूं, और पूरा होने के बाद कैप्चर किए गए हिस्सों को वापस कर सकता हूं।
मैंने इसे करने के लिए कुछ कोड लिखा है, लेकिन यह घृणित और राज्य-मशीनी था, और मुझे ऐसा महसूस करने में मदद नहीं मिल रही है कि मुझे कुछ स्पष्ट याद आ रही है। यह साफ करने के लिए कोई विचार?
मैं विशेष रूप से एक और घोषणात्मक, पठनीय वर्णन से नट-किरकिरा तर्क को अलग करने का एक तरीका ढूंढ रहा हूं। मैं या तो एक और प्राकृतिक भाषा (जैसे प्रोलॉग या एफ #) का उपयोग कर झुका रहा था, या एक अच्छी तरह से परीक्षण मॉड्यूल में हार्ड-टू-रीड कोड को encapsulating। फिर भी, मैं उम्मीद कर रहा था कि मुझे अतिरिक्त कोड का एक गुच्छा लिखना पड़ेगा ... –